0

这是我想要完成的:

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

探索的可能解决方案:

这是我到目前为止探索的内容(以及为什么它们不起作用):

  • 使用类似于FileContentResult此处所述的内容在 ASP.NET MVC 中返回文件以查看/下载来下载文件。这个解决方案需要我在我的服务器上获取内容,然后从我的服务器流式传输到浏览器。因此,此解决方案将不起作用。
  • 使用 HTML 5download属性:HTML 5download属性本来可以很好地工作,但问题是,虽然它确实是一个非常简洁的解决方案,但并非所有浏览器都支持它。
  • 更改文件的内容类型:我可以做的另一件事(至少对于我拥有的文件)将文件的内容类型属性更改为浏览器无法理解的内容,因此将被迫下载文件。这可能在某些浏览器中有效,但并非完全如此,因为 IE 足够聪明,可以超越内容类型并查看文件的内容来确定内容类型。此外,如果我不拥有这些文件,那么我将无权更改文件的内容类型。

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

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

4

2 回答 2

2

简而言之,在我的控制器操作中,我应该能够指定文件的 URL,并且浏览器应该以某种方式强制下载文件 [而不将文件的 URL 暴露给客户端]。

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

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

于 2013-11-05T09:49:26.760 回答
0

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

https://{service}/FileTransfer/DownloadFile/{id、同义词、文件名等}

Blob 路径不会暴露,Web 应用程序不会出现文件传输问题。

于 2013-11-06T09:40:04.107 回答