【问题标题】:How to Download Azure blob file into download folder, not in browser如何将 Azure blob 文件下载到下载文件夹中,而不是在浏览器中
【发布时间】:2020-07-24 20:10:02
【问题描述】:

我想在页面中放置一个按钮,当用户单击该按钮时,我想将 azure blob 下载到下载文件夹中。

  1. 我生成blob链接url:

    var downloadLink = blobService.getUrl('mycontainer', 'myblob', 'SAS_TOKEN');

  2. 获得此网址后,我使用此解决方案进行下载:

    var link = document.createElement("a");
    link.download = name;
    link.href = url;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    

我在 S3 中使用了相同的方法,文件可以在同一个浏览器中下载到下载文件夹中,但对于 Azure,当我使用此解决方案时,它只是打开一个新选项卡并在浏览器中显示内容。

谁能帮忙看看这是为什么?如何下载文件而不是在浏览器中显示内容?

生成的url是:

https://myBucket.blob.core.windows.net/mycontainer/1000/rawEvents.json?se=2022-04-20T23%3A59%3A59Z&sp=rwdlacup&sv=2018-03-28&ss=b&srt=sco&sig=EzsjwqKfYmwwUo2n1ySkCBAsTfW35ic8M8F6tfuXEPo%3D

如果点击这个url,它也可以读取内容。

【问题讨论】:

    标签: azure azure-blob-storage azure-sas


    【解决方案1】:

    您需要确保Content-TypeContent-Disposition 标头具有触发浏览器下载文件的值。尤其是 Content-Disposition 很重要。

    Content-Type: application/octet-stream
    Content-Disposition: attachment
    

    您可以设置内容处置on the blob itself

            var blob = container.GetBlobReference(userFileName);
            blob.Properties.ContentDisposition = "attachment";
            blob.SetProperties();
    
    

    add it to your SAS token(另见相应的blog post)。

            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
            CloudBlobContainer container = blobClient.GetContainerReference("videos");
            string userFileName = service.FirstName + service.LastName + "Video.mp4";
            CloudBlockBlob blob = container.GetBlockBlobReference(userFileName);
            SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy()
            {
                Permissions = SharedAccessBlobPermissions.Read,
                SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1)
            };
            SharedAccessBlobHeaders blobHeaders = new SharedAccessBlobHeaders()
            {
                ContentDisposition = "attachment; filename=" + userFileName
            };
            string sasToken = blob.GetSharedAccessSignature(policy, blobHeaders);
            var sasUrl = blob.Uri.AbsoluteUri + sasToken;//This is the URL you will use. It will force the user to download the video.
    

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 2019-03-08
      • 2021-04-29
      • 2012-08-10
      • 1970-01-01
      • 2018-04-13
      相关资源
      最近更新 更多