繁体   English   中英

Javascript 下载 URL - Azure Blob 存储

[英]Javascript download a URL - Azure Blob Storage

我正在使用 Azure Blob 存储,我希望用户能够下载文件。 当用户单击他们想要下载的文件时,我使用 AJAX 生成共享访问签名并返回要下载的 URL。 有什么办法可以让我使用 Javascript 下载文件吗? 或者我可以使用其他一些方法......我也希望它不运行服务器端,因为当我应该能够直接从 URL 下载时没有理由产生不必要的成本......

基本上,Dropbox 是如何做到的……它是否以某种方式提交了某种形式? 它甚至不必像那样。

如果我理解正确,您希望用户在单击SAS URL时看到“ Open/Save As提示。

假设我的理解是正确的,最近Windows Azure存储已经宣布了一些增强功能。 其中一项增强功能是为blob添加了Content-Disposition属性,允许在用户单击blob的SAS链接时显示此Open/Save As提示。 使用Content-Disposition ,您有两个选择:

  1. Content-Disposition设置为blob属性 :在这种情况下,每当用户单击SAS链接时,系统都会提示他们保存文件。 但在这种情况下,它们将始终被提示,因此SAS链接与否,用户永远无法在浏览器中看到内联文档。 您可能会发现此链接对此有用: http//msdn.microsoft.com/en-us/library/windowsazure/ee691966.aspx
  2. Content-Disposition设置为SAS URL的一部分 :在这种情况下,只有在用户单击包含Content-Disposition的SAS URL时才会提示用户。 您可能会发现此链接对此有用: http//msdn.microsoft.com/en-us/library/windowsazure/dn140255.aspx

所以假设你有一个png文件。 在选项1中,它永远不会在浏览器中内嵌显示,它将在客户端计算机上下载并在计算机上的已注册图像查看器中打开。 在选项2中,如果在SAS URL中设置了Content-Disposition ,则图像文件将下载到客户端计算机上,并在计算机上的已注册图像查看器中打开,否则它将直接显示在浏览器中。

如果您使用的是.Net,则Storage Client库3.0.0.0支持此功能,因此您无需编写REST API包装器(但我认为您正在使用PHP ...来自您之前关于CORS的问题:))。

我过去做过这种方式的方法是打开隐藏的iframe和下载的url。

有点像

var frame = document.createElement('iframe');
frame.src = url; // your Azure url
frame.style.display = 'none';
document.body.appendChild(frame);

请注意,您需要确保不要尝试在安全(https)页面上执行此操作并使用不安全的下载(http)

为了避免重载/重定向,我使用这个库:

http://jqueryfiledownload.apphb.com/

如果您需要帮助进行设置http//johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/

但是如果你想重定向用户,你可以使用基本的东西:

window.location.href = "http://stackoverflow.com/file.pdf";

一旦你有了下载文件的 url,你就可以使用包fs-browsers
它为客户端提供了简单易用的下载方法。
它是这样的:

 import { downloadFile } from 'fs-browsers'; downloadFile(url-to-the-file);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM