从数据库下载exe文件

时间:2012-05-15 18:21:46

标签: asp.net vb.net

我有一些我上传到我的数据库的exe文件,因为我不希望它们可公开访问。我尝试使用链接按钮和通用处理程序使用以下代码提供文件:

Context.Response.Clear()
Context.Response.ContentType = "application/exe"
Context.Response.AppendHeader("Content-Disposition", "filename=program.exe")
Context.Response.BinaryWrite(binaryfile)

问题:Google Chrome不会将下载视为任何其他exe文件,而是在下载后报告“program.exe通常不会下载并且可能存在危险”。使用“discard”按钮,“保持”下载选项隐藏在上下文菜单下。

有没有其他/更好的方法来提供存储在数据库中的exe文件?

3 个答案:

答案 0 :(得分:4)

我经常看不到application/exe。将application/octet-stream用于可执行文件更为常见。

如果您正在使用.NET,那么我将暂时假设您正在使用IIS。 (如果不是这样,请纠正我。)如果是这样,那么this (old, but still useful) list of MIME types and file extensions可能会有所帮助。

当然,在任何真正意义上,您都无法从服务器端绕过任何浏览器端限制。您可以修改发送给客户端的标头,但最终由客户端决定如何处理响应。

答案 1 :(得分:3)

您是否查看过此问题:Getting around Chrome's Malicious File Warning

Jeff G建议注册Google网站站长工具并添加您的网站。 Google需要几天的时间来抓取您的网站,并填写任何信息,但它最终会不再认为您的文件是恶意的。

答案 2 :(得分:1)

在我的情况下,我使用以下一组标题解决了它:

Cache-Control: max-age=864000
Content-type: application/octet-stream
Content-Disposition: attachment; filename="....zip"
Content-Transfer-Encoding: binary
Last-Modified: ...
Etag: ...
Content-Length: ...

要特别注意Content-type,Cache-Control,Last-Modified和Etag,这对我来说似乎是有用的标题。