System.InvalidOperationException: Response Content-Length mismatch: too few bytes written (0 of 1628
今天记录下通过微软官方开源技术open-xml-sdk操作excel写入内存流,并将该内存流返回给Web客户端,该方法服务器端不用保存本地Excel文件,没有和磁盘的IO开销,效率更高,也不存在服务器excel文件太多需要删除的情况。废话不多说,直接上代码:
public static IActionResult ExportTest(string fileName){MemoryStream stream = new MemoryStream();//第一步,从输入输出流创建Excel文档包SpreadsheetDocument,这里使用内存流SpreadsheetDocument document = SpreadsheetDocument.Create(stream, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook);//第二步,添加WorkbookPart,并创建Workbook对象WorkbookPart workbookPart = document.AddWorkbookPart();workbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook();//第三步,添加WorksheetPart,并创建Worksheet对象WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();worksheetPart.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet(new SheetData());//第四步,给Workbook添加WorksheetsSheets sheets = document.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());//第五步,创建Sheet对象实例,并绑定到给Workbook中,并将此sheet加入SheetsSheet sheet = new Sheet() { Id=document.WorkbookPart.GetIdOfPart(worksheetPart),SheetId=1,Name="mySheet"};sheets.Append(sheet);//第六步,保存workbookworkbookPart.Workbook.Save();//第七步,关闭Excel文档包SpreadsheetDocumentdocument.Close();//必须将流的当前位置置0,否则将引发异常//如果不设置为0,则流的当前位置在流的末端1629,然后读流就会从索引1629开始读取,实际上流的最大索引是1628,就会引发无效操作异常System.InvalidOperationException//System.InvalidOperationException: Response Content-Length mismatch: too few bytes written (0 of 1628)stream.Position = 0;string fileExt = Path.GetExtension(fileName);var provider = new FileExtensionContentTypeProvider();var memi = provider.Mappings[fileExt];FileStreamResult fileStreamResult = new FileStreamResult(stream, memi) { FileDownloadName = fileName };return fileStreamResult;}
需要添加的引用:
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.StaticFiles;
此过程中比较容易出错的点就是很多人容易忘记“stream.Position = 0;”这行代码,所以我记录下来,供大家参考。
System.InvalidOperationException: Response Content-Length mismatch: too few bytes written (0 of 1628相关推荐
- Neo4j企业版报错:py2neo.errors.ProtocolError: Cannot decode response content as JSON
py2neo.errors.ProtocolError: Cannot decode response content as JSON 环境为neo4j-enterprise-5.1.0.py2neo ...
- The maximum string content length quota (8192) has been exceeded while reading XML data
原文: The maximum string content length quota (8192) has been exceeded while reading XML data 问题场景:在我们 ...
- C#——实现IComparableT 接口,ArrayLIst调用ArrayLIst.Sort()抛出System.InvalidOperationException异常解决方案
问题描述 未经处理的异常: System.InvalidOperationException: 未能比较数组中的两个元素. ---> System.ArgumentException: 必须至少 ...
- System.InvalidOperationException:“寄宿 HWND 必须是子窗口。”
当试图在 WPF 窗口中嵌套显示 Win32 子窗口的时候,你有可能出现错误:"System.InvalidOperationException:"寄宿 HWND 必须是子窗口.& ...
- 关于System.InvalidOperationException异常
关于System.InvalidOperationException异常 参考文章: (1)关于System.InvalidOperationException异常 (2)https://www.cn ...
- asp.net 访问 access出现 ole_connection.ServerVersion引发了System.InvalidOperationException的解决
今天在一台电脑上使用asp.net访问access,出现了 ole_connection.ServerVersion引发了System.InvalidOperationException: 下面是解决 ...
- System.InvalidOperationException:“线程间操作无效: 从不是创建控件“txtPortName02”的线程访问它。”...
"System.InvalidOperationException"类型的未经处理的异常在 System.Windows.Forms.dll 中发生 其他信息: 线程间操作无效: ...
- System.InvalidOperationException: The stream does not support reading
We are using EMS(.Net DLL, TIBCO.EMS.dll, version 4.3.0) as the middleware to communicate between .N ...
- [SoapUI] 在Test Step 下加Script Assertion,用 messageExchange 获取当前步骤的response content...
//Get response content of the current request def response = messageExchange.getResponseContent()//C ...
最新文章
- 【组队学习】【24期】Docker教程
- 滴滴出行首次进军非洲市场,网络推广外包后的滴滴想去的国家还有很多
- Java 常见的OOM类型总结
- 2014蓝桥杯-B-省赛-五-圆周率
- uniapp无法使用substr_关公战秦琼------Excel、SPSS Modler和R的使用对比(下)
- java第二部分项目_Java_第二次作业:项目构思与实现
- 2014/4/4做题感悟
- Zabbix如何通过ODBC对接Oracle获取相关数据
- HDU-3664 Permutation Counting(DP)
- windows下3389端口开启和连接
- 解构OPPO IoT:“开放生态”+“用户思维”,“智美生活”雏形已显
- C++ 高仿easyX图形库
- 设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类来继承图形类,并实现上述两个方法。并创建实例验证。
- 两轮差速机器人ROS下速度解算
- android学习资源大整合(持续更新ing)
- 使用sws_scale转换视频、使用swr_convert转换音频
- 怎么调大计算机浏览器内字体,浏览器字体大小怎么设置,教你浏览器字体大小怎么设置-win7旗舰版...
- replicate vs duplicate
- 【Java】检查二叉树是否平衡。
- SSD固态硬盘的闪存芯片颗粒介绍
热门文章
- 小程序源码:登录接口已修复梦想贩卖机V2 2.0.4 修复版
- 5G 与 MEC 边缘计算
- vue 实现元素可拖曳
- 易语言GIF屏幕录制
- 数据可视化:地图使用案例
- Excel模板导出并插入图片
- python求两数最大公因数_Python求两个数的最大公约数
- 刺激战场春节版年兽全网最详细位置,另附刺激战场更新内容
- [全]win7成功干掉win8--一个小U盘引发的血案(U盘在win8下装win7的方法)Lenovo V580c
- android打开位置服务,Android - 位置定位(Location)服务(Service)类的基本操作