【问题标题】:TransmitFile yielding a corrupt files with wrong filesizeTransmitFile 产生文件大小错误的损坏文件
【发布时间】: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


【解决方案1】:

在方法末尾缺少Response.Flush()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 2023-04-08
    • 2010-10-31
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多