gpt4 book ai didi

angular - 使用 typescript 和 angular2 将图像上传到存储 blob

转载 作者:太空狗 更新时间:2023-10-29 18:20:58 25 4
gpt4 key购买 nike

我正在使用 typescript 开发 Angular 2 应用程序。在我当前的项目中,我实现了将图像上传到 azure 存储 blob 的功能,为此我点击了以下链接。

http://www.ojdevelops.com/2016/05/end-to-end-image-upload-with-azure.html

我为我的 View 编写了以下代码行,以从我的本地计算机中选择图像。

<form name="form" method="post">
<div class="input-group">

<input id="imagePath" class="form-control" type="file" name="file" accept="image/*" />

<span class="input-group-btn">

<a class="btn btn-success" (click)='uploadImage()'>Upload</a>
<!--href="../UploadImage/upload"-->
<!--(click)='uploadImage()'-->
</span>
</div>
</form>

我的 View 将如下图所示。 enter image description here

当我点击“上传”按钮时,在 uploadcomponent.ts 文件中,我编写了以下代码行,用于发出 http 发布请求以及作为选定图像路径的内容。

        uploadImage(): void {



//var image = Request["imagePath"];
//alert('Selected Image Path :' + image);

this.imagePathInput = ((<HTMLInputElement>document.getElementById("imagePath")).value);
alert('Selected Image Path :' + this.imagePathInput);


let imagePath = this.imagePathInput;

var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');//application/x-www-form-urlencoded

this._http.post('/UploadImage/UploadImagetoBlob', JSON.stringify(imagePath),
{
headers: headers
})
.map(res => res.json())
.subscribe(
data => this.saveJwt(data.id_token),
err => this.handleError(err),
() => console.log('ImageUpload Complete')
);


}

UploadImageController.cs

UploadImageController.cs 文件中,我在下面编写了用于将图像上传到 Azure 存储 blob 的代码行。

    [HttpPost]
[Route("UploadImage/UploadImagetoBlob")]
public async Task<HttpResponseMessage> UploadImagetoBlob()
{
try
{
//WebImage image = new WebImage("~/app/assets/images/AzureAppServiceLogo.png");
//image.Resize(250, 250);
//image.FileName = "AzureAppServiceLogo.png";
//img.Write();
var image = WebImage.GetImageFromRequest();
//WebImage image = new WebImage(imagePath);
var imageBytes = image.GetBytes();

// The parameter to the GetBlockBlobReference method will be the name
// of the image (the blob) as it appears on the storage server.
// You can name it anything you like; in this example, I am just using
// the actual filename of the uploaded image.
var blockBlob = blobContainer.GetBlockBlobReference(image.FileName);
blockBlob.Properties.ContentType = "image/" + image.ImageFormat;

await blockBlob.UploadFromByteArrayAsync(imageBytes, 0, imageBytes.Length);

var response = Request.CreateResponse(HttpStatusCode.Moved);
response.Headers.Location = new Uri("../app/upload/uploadimagesuccess.html", UriKind.Relative);
//return Ok();
return response;

}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
return null;
}



}

在上面的 Controller 代码中,下面的代码总是给出空值。

var image = WebImage.GetImageFromRequest();

能否请您告诉我如何解决上述问题。

-普拉迪普

最佳答案

经过大量研究,我得到了结果。以下链接对于将所选图像上传到服务器或 Azure 存储 blob 非常有用。对于我的场景,我将选定的图像上传到 Azure 存储 Blob。

https://www.thepolyglotdeveloper.com/2016/02/upload-files-to-node-js-using-angular-2/

http://www.ojdevelops.com/2016/05/end-to-end-image-upload-with-azure.html

这是我的UploadImage.Component.html

<form name="form" method="post" action="" enctype="multipart/form-data">
<div class="input-group">

<input id="imagePath" class="form-control" type="file" (change)="fileChangeEvent($event)" name="Image" accept="image/*" />

<span class="input-group-btn">

<a class="btn btn-success" (click)='uploadImagetoStorageContainer()'>Upload</a>

</span>
</div>

这是我的UploadImage.Component.ts

    /////////////////////////////////////////////////////////////////////////////////////
// calling UploadingImageController using Http Post request along with Image file
//////////////////////////////////////////////////////////////////////////////////////
uploadImagetoStorageContainer() {
this.makeFileRequest("/UploadImage/UploadImagetoBlob", [], this.filesToUpload).then((result) => {
console.log(result);
}, (error) => {
console.error(error);
});

}
makeFileRequest(url: string, params: Array<string>, files: Array<File>) {
return new Promise((resolve, reject) => {
var formData: any = new FormData();
var xhr = new XMLHttpRequest();
for (var i = 0; i < files.length; i++) {
formData.append("uploads[]", files[i], files[i].name);
}
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
alert("successfully uploaded image into storgae blob");
resolve(JSON.parse(xhr.response));

} else {
reject(xhr.response);
}
}
}
xhr.open("POST", url, true);
xhr.send(formData);
});
}

fileChangeEvent(fileInput: any) {
this.filesToUpload = <Array<File>>fileInput.target.files;
}

这是我的UploadImageController.ts

    [HttpPost]
[Route("UploadImage/UploadImagetoBlob")]
public async Task<IHttpActionResult> UploadImagetoBlob()//string imagePath
{
try
{
//var iamge= imagePath as string;
//WebImage image = new WebImage("~/app/assets/images/AzureAppServiceLogo.png");
//image.Resize(250, 250);
//image.FileName = "AzureAppServiceLogo.png";
//img.Write();
var image =WebImage.GetImageFromRequest();
//WebImage image = new WebImage(imagePath);
//var image = GetImageFromRequest();
var imageBytes = image.GetBytes();

// The parameter to the GetBlockBlobReference method will be the name
// of the image (the blob) as it appears on the storage server.
// You can name it anything you like; in this example, I am just using
// the actual filename of the uploaded image.
var blockBlob = blobContainer.GetBlockBlobReference(image.FileName);
blockBlob.Properties.ContentType = "image/" + image.ImageFormat;

await blockBlob.UploadFromByteArrayAsync(imageBytes, 0, imageBytes.Length);

//var response = Request.CreateResponse(HttpStatusCode.Moved);
//response.Headers.Location = new Uri("../app/upload/uploadimagesuccess.html", UriKind.Relative);
//return response;
return Ok();


}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
return null;
}

}

这个答案可能对正在寻找使用 Angular 2 应用程序中的 typescript 将所选图像上传到 Azure 存储 Blob 的功能的人有帮助。

问候,

普拉迪普

关于angular - 使用 typescript 和 angular2 将图像上传到存储 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40850344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com