2013-11-05 148 views
0

这是我想达到什么:强制文件下载

  • 我都存储在一个文件Windows Azure Blob存储(或者任何不在我的web服务器上但可通过URL访问的文件)。
  • 我想强制下载文件,而不是实际先下载文件到我的网络服务器上,即浏览器应该自动从这个外部URL获取文件并提示用户下载它。

可能的解决方案探微:

这里是我迄今研究(以及为什么他们将无法正常工作):

  • 使用类似FileContentResult这里描述Returning a file to View/Download in ASP.NET MVC下载该文件。这个解决方案需要我在我的服务器上获取内容,然后从我的服务器流到浏览器。基于这个原因,这个解决方案将无法工作
  • 使用HTML 5 download属性:HTML 5 download属性将工作得很好,但问题是,虽然它是一个非常整洁的解决方案,但它并不支持所有浏览器。
  • 更改文件的内容类型:我可以做的另一件事(至少对于我自己的文件)将文件的内容类型属性更改为浏览器无法理解的内容,因此将被迫下载文件。这可能适用于某些浏览器,但不是所有浏览器都能正常工作,因为IE足够聪明,可以超越内容类型,并可以看到文件内容以确定内容类型。此外,如果我不拥有这些文件,那么我将无法访问更改文件的内容类型。

简而言之,在我的控制器操作中,我应该能够指定文件的URL,并以某种方式浏览器应该强制下载文件。

这是可以完成的东西吗?如果是的话,那么我有什么想法,我可以做到这一点?

+0

你为什么不把文件的URL放在页面上的链接上 - 浏览器会试图下载它? – Paddy

+0

谢谢。这是我的最后手段,如果没有其他工作:)我不想这样做的原因是,它会暴露链接到我的文件。 –

回答

2

简单地说,在我的控制器行动,我应该能够指定文件的URL并以某种方式浏览器应强制下载文件[不包含文件的URL暴露给客户端。

你不行。如果最终的URL保持隐藏状态,您的服务器必须提供数据,所以您的服务器必须从URL下载文件。

您的客户端无法下载无法获取URL的文件。

0

您可以创建文件传输WCF服务(REST),它将通过您的文件管理器直接通过URL将您的内容从blob存储或其他来源通过文件管理器流式传输到客户端浏览器。

的https:// {}服务/文件传输/ DownloadFile/{ID,同义词,文件名等}

斑点路径不会被暴露,Web应用程序将是文件传输问题免费。