为什么下载文件比输入流大?

问题描述 投票:0回答:1

我正在编写一个C#方法来获取MemoryStream并将其作为文件下载到浏览器中。我使用FileStream加载.xlsx文件并将其复制到MemoryStream

using (FileStream fs = new FileStream(Filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    docStream = new MemoryStream();
    fs.CopyTo(docStream);
}

然后我将docStream传递给OpenXML类

using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docStream, true))

并使用OpenXML类和方法更新内容。最后,我将docStream传递给DownloadStream方法,但是,下载的文件大于流的大小。

public class Utility
{
    public static void DownloadStream(MemoryStream inputStream, string filename)
    {
        byte[] bytes = inputStream.ToArray();

        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
        HttpContext.Current.Response.AddHeader("Content-Length", bytes.Length.ToString());
        HttpContext.Current.Response.ContentType = "application/octet-stream";
        HttpContext.Current.Response.BinaryWrite(bytes);
    }
}

我放了一个断点并验证了inputStream.Lentgh17112字节。我也证实bytes.Length17112

当我检查下载文件(.xlsx)时,它的大小是qazxsw poi bytes。

此外,当我打开文件时,我收到一个警告,文件可能已损坏,但Excel可以修复它。

c# stream downloading
1个回答
0
投票

我能够通过在SO中找到类似的问题来解决问题。它与编码无关。

问题是我需要添加:

25983

HttpContext.Current.Response.End(); 后的我的DownloadStream方法。

BinaryWrite
© www.soinside.com 2019 - 2024. All rights reserved.