我正在使用 Angular 通过 POST 请求将 PDF 文件发送到我的 WebAPI Controller :
$scope.upload = Upload.upload({
url: "../api/Locker/Upload", // webapi url
method: "POST",
file: controllerFile,
})
在我的 Controller 上的 POST 方法中,我得到该文件的 StreamContent,如下所示:
public async Task<HttpResponseMessage> Post()
{
HttpRequestMessage request = this.Request;
if (!request.Content.IsMimeMultipartContent())
{
request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
}
var result = await Request.Content.ReadAsMultipartAsync<CustomMultipartFormDataProvider>(new CustomMultipartFormDataProvider());
string fileName = result.FileData[0].Headers.ContentDisposition.FileName;
var fileData = result.Contents[0];
}
它说 results.Contents[0] 是 HttpContent 类型,但在立即窗口中,当我键入 fileData 时,它说它是 StreamContent 类型。
我正在尝试将此文件数据上传到 Azure Blob 存储,以便稍后可以使用 GET 请求检索它,但这样做时遇到问题。
//in post method
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(blobConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(blobContainer);
await container.CreateIfNotExistsAsync();
string blobId = Guid.NewGuid().ToString();
UploadToBlob(container, blobId, fileData);
以及我陷入困境的方法:
private async void UploadToBlob(CloudBlobContainer container, string blobId, HttpContent fileData)
{
CloudBlockBlob block = container.GetBlockBlobReference(blobId);
block.UploadFromStream(fileData);
}
block.UploadFromStream 出错,因为 fileData 当然不是 Stream。
如果我期待内容类型为 arraybuffer 的 HTTP 响应,我该怎么办,以便我可以在 Web 应用程序中公开该文件,例如:
//angular get request
.success(function (data, status, headers, config) {
// file is uploaded successfully
console.log(data);
var fileBack = new Blob([(data)], { type: 'application/pdf' });
var fileURL = URL.createObjectURL(fileBack);
}
最佳答案
block.UploadFromStream(await fileData.ReadAsStreamAsync()) 怎么样?
关于c# - Azure Blob 存储 - 从 WebApi Controller 将 Http/StreamContent 上传到 CloudBlockBlob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36438923/