Я пишу метод C #, чтобы получить MemoryStream и загрузить его в виде файла в браузере.Я загружаю файл .xlsx с помощью FileStream и копирую его в 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
.
Когда я проверяю загружаемый файл (который является .xslx), его размер составляет 25983
байт.
Также, когда я открываю файл, я получаю предупреждение о том, что файл может быть поврежден, ноExcel может починить его.