c# - Azure Blob 存储 - 从 WebApi Controller 将 Http/StreamContent 上传到 CloudBlockBlob

标签 c# angularjs azure asp.net-web-api azure-storage

我正在使用 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/

相关文章:

azure - Azure DevOps 中的错误日志中出现错误

azure - 新-AzureVMConfig : A positional parameter cannot be found that accepts argument 'Add-AzureProvisioningConfig'

c# - 我需要取消订阅我的表格中的事件吗?

c# - 如何在 C# Express 2008 中添加命名空间?

c# - Xamarin\C# 所有类的命名空间相同吗?

javascript - 从 md-tab 自定义未选择的 md-tab-label 的样式

c# - 从 Scorable 中,如何调用对话框然后清除堆栈?

javascript - Angularjs 登录后将焦点赋予窗口

javascript - Angular JS IE9 Hashbang url 重写

linux - Azure Ubuntu : Why is the temp drive mounted to/mnt?