我正在编写一个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.Lentgh
是17112
字节。我也证实bytes.Length
是17112
。
当我检查下载文件(.xlsx)时,它的大小是qazxsw poi bytes。
此外,当我打开文件时,我收到一个警告,文件可能已损坏,但Excel可以修复它。
我能够通过在SO中找到类似的问题来解决问题。它与编码无关。
问题是我需要添加:
25983
到HttpContext.Current.Response.End();
后的我的DownloadStream方法。
BinaryWrite