我正在使用Azure Blob存储,并且我希望用户能够下载文件。当用户点击他们想下载的文件时,我使用AJAX生成共享访问签名并返回从其下载的URL。那么有没有什么方法可以使用Javascript下载文件?或者是否有其他方法可以使用...我也希望它不能运行服务器端,因为当我应该能够直接从URL下载时,没有任何理由会产生不必要的成本...Javascript下载URL - Azure Blob存储
基本上,Dropbox是如何做到的......是否以某种方式提交某种形式?它甚至不必如此。
我正在使用Azure Blob存储,并且我希望用户能够下载文件。当用户点击他们想下载的文件时,我使用AJAX生成共享访问签名并返回从其下载的URL。那么有没有什么方法可以使用Javascript下载文件?或者是否有其他方法可以使用...我也希望它不能运行服务器端,因为当我应该能够直接从URL下载时,没有任何理由会产生不必要的成本...Javascript下载URL - Azure Blob存储
基本上,Dropbox是如何做到的......是否以某种方式提交某种形式?它甚至不必如此。
如果我理解正确,您希望用户在单击SAS URL时看到Open/Save As
提示。
假设我的理解是正确的,最近Windows Azure Storage宣布了一些增强功能。其中一项增强功能是添加了Content-Disposition
blob属性,该属性允许此Open/Save As
提示在用户单击blob的SAS链接时显示。随着Content-Disposition
,你有两个选择:
Content-Disposition
为BLOB属性:在这种情况下,每当SAS链路上的用户点击,他们将被提示保存文件。但在这种情况下,他们会总是被提示如此SAS链接与否,用户将永远无法在浏览器中看到文档内联。您可能会发现此链接对此有用:http://msdn.microsoft.com/en-us/library/windowsazure/ee691966.aspx。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 library 3.0.0。0支持这个特性,所以你不必编写REST API的包装器(但是我认为你使用的是PHP ...)。
为了避免重装/重定向,我使用这个库:
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";
我这样做的方式在过去是通过打开一个隐藏的iframe与下载的网址。沿
var frame = document.createElement('iframe');
frame.src = url; // your Azure url
frame.style.display = 'none';
document.body.appendChild(frame);
请注意,你需要确保你也不要试图用一个不安全的下载要做到这一点安全(HTTPS)网页上线(HTTP)
东西
我试过这样做是为了我的项目,不能得到'另存为'对话框出现。服务器端我已经尝试设置ContentDisposition设定为这样:
Blob.Properties.ContentDisposition = "attachment"
Blob.SetProperties()
客户端我已经给了用户访问BLOB像这样:
document.getElementById("downloadLink").innerHTML = "<a href=" + bloburi + ">" + bloburi + "</a>";
如果我点击这个链接的文件上打开浏览器窗口。我如何获得“另存为”对话框?
你有什么想法为什么签名不符合新版本?如果$ version ='2012-02-12'它会生成一个好签名,但如果我将其更改为'2013-08-15',它表示签名不匹配。没有其他更改,但我没有看到有关更改如何为新版本构建签名的任何内容:http://msdn.microsoft.com/en-us/library/windowsazure/dn140255.aspx – Paul
假设您'重新编写REST API封装,你是否包含了所有你正在构建'SignatureString'的新参数?请参阅您提到的链接中标题为“构建签名字符串”的部分。 –
发布关于使用PHP和最新版本的REST API以及您正在使用的代码创建SAS URL的其他问题可能不是一个坏主意。我相信这会帮助很多人。 –