【问题标题】:Azure Blob Storage - Uploading Http/StreamContent to a CloudBlockBlob from WebApi ControllerAzure Blob 存储 - 从 WebApi 控制器将 Http/StreamContent 上传到 CloudBlockBlob
【发布时间】:2016-07-26 03:15:15
【问题描述】:

我正在使用 Angular 通过 POST 请求将 PDF 文件发送到我的 WebAPI 控制器:

  $scope.upload = Upload.upload({
        url: "../api/Locker/Upload", // webapi url
        method: "POST",
        file: controllerFile,
  })

在我的控制器上的 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。

如果我期望 HTTP 响应的内容类型为:arraybuffer,我该怎么办,以便我可以在我的 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);
 }

【问题讨论】:

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


    【解决方案1】:

    block.UploadFromStream(await fileData.ReadAsStreamAsync()) 怎么样?

    【讨论】:

      猜你喜欢
      • 2019-03-18
      • 1970-01-01
      • 2018-11-17
      • 2023-03-28
      • 2019-05-26
      • 1970-01-01
      • 2014-08-23
      • 2021-03-07
      • 2021-01-16
      相关资源
      最近更新 更多