TransmitFile возвращает поврежденные файлы с неправильным размером - PullRequest
4 голосов
/ 17 мая 2019

У меня есть следующий способ загрузки файла при посещении страницы. Проблема заключается в том, что он возвращает файлы с добавленными байтами, что в зависимости от типа файла может привести к его повреждению. У меня есть следующий метод:

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

Например, при загрузке файла xlsm размером 177030 с использованием вышеуказанного метода загруженный файл имеет размер 177710 и становится поврежденным (но исправимым) в Excel. Кажется, всегда добавляется 680 байт.

Я пытался заменить TransmitFile на WriteFile. Установка длины в TransmitFile для фактического размера файла, который правильно получен из FileInfo. Я также просмотрел разные файлы и попытался запустить его как локально на сервере, так и локально; все с одинаковыми результатами.

1 Ответ

0 голосов
/ 28 мая 2019

Отсутствует Response.Flush() в конце метода

...