【发布时间】:2019-10-04 19:26:25
【问题描述】:
当访问页面时,我可以使用以下方法下载文件。问题是它似乎会产生带有添加字节的文件,基于文件类型可能会使其损坏。我有以下方法:
Public Class GetImage
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'snipped unimportant code
Dim fileSize = New FileInfo(filepath).Length
Response.Clear()
Response.AddHeader("content-length", fileSize.ToString())
Response.ContentType = "application/octet-stream"
Response.AppendHeader("content-disposition", "attachment; filename=" & DisplayName)
Response.TransmitFile(filepath)
End Sub
End Class
例如,当使用上述方法下载大小为177030 的xlsm 文件时,下载的文件大小为177710 并在Excel 中损坏(但可修复)。它似乎总是添加680 字节。
我尝试用WriteFile 替换TransmitFile。将TransmitFile 中的长度设置为从FileInfo 正确检索的实际文件大小。我还查看了不同的文件,并尝试在服务器本地和本地运行它;都具有相同的结果。
【问题讨论】:
-
也许您 PC 中的某些防病毒/反恶意软件套件不喜欢 xlsm 文件?如果您只是重命名它(更改扩展名),行为会改变吗? Fiddler 显示了什么?如果您使用 wget 或 curl 或类似方式下载此文件,会发生什么情况?
-
@Arvo 这是我的错误。我根据特别提到
xlsm文件的报告来判断它。在测试中,我显然使用了对添加的额外字节没有问题的文件,并且显示该文件没有任何错误。所以问题仍然存在,但它与文件类型无关(现在对我来说更有意义) -
这对我来说也更有意义 :) 快速搜索找到的主题,例如:stackoverflow.com/questions/14566781/…
-
您不需要 Response.Clear() 或 Response.AddHeader("content-length")。
-
@SimonMourier 删除了它们 @Arvo 感谢显然
Flush是缺少的元素;随意将其添加为 anwser
标签: vb.net corruption transmitfile