在JavaScript中下载Blob

时间:2016-02-27 12:53:36

标签: javascript jquery wcf rest azure

我使用WCF REST服务创建了Azure云服务。我正在使用blob进行本地存储开发。这时,我已经能够在容器中上传文件,并将它们列在Listbox1中。现在,我需要从Listbox1中选择一个项目(blob)并下载所选项目。 这是我的代码:

public void DownloadBlob(AzureDataContract download) {
    // Connect to the storage account's blob endpoint 
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("AzureStorageConnectionString"));
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

    // Create the blob storage container 
    CloudBlobContainer container = blobClient.GetContainerReference(download.ContainerName);
    container.CreateIfNotExists();

    // Create the blob in the container 
    CloudBlockBlob blob = container.GetBlockBlobReference("test");

    using (var fileStream = System.IO.File.OpenWrite(download.FilePath))
    {
        blob.DownloadToStream(fileStream);
    }
}

然后我尝试使用JQuery和Ajax调用我的方法如下:

$('#btnDownload').click(function() {
  var download = {
    "ContainerName": $("#listContainer").val(),
    "FilePath": $("#listBlob option:selected").val()
  };
  $.ajax({
    type: "POST",
    url: "http://localhost:49416/AzureService.svc/DownloadBlob",
    data: JSON.stringify(download),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    processData: true,
    success: function(data) {
      alert("downloading");
    },
    error: function(data) {
      alert("error");
    }
  });

});

2 个答案:

答案 0 :(得分:1)

此时你的DownloadBlob函数没有返回任何内容。这是一个无效的功能。所以你的客户永远不会收到blob。目前它正在做的是将blob写入服务器磁盘上的文件(download.FilePath)。如果要在休息呼叫中下载任何内容,则应将该文件返回给客户端。

答案 1 :(得分:0)

您的代码看起来很好。运行后,blob文件应该已经下载到你的文件路径'地点。 ' System.UnauthorizedAccessException的'通常在您无权删除/创建文件夹下的文件时发生。我想你可以检查一下你是否对#34; FilePath'位置。