Dev*_*-er 5 memorystream exception filestream asp.net-core
使用 MemoryStream 写入 PDF 时,ASP.Net Core 从 FileStreamResult 返回 500 服务器错误
公共异步任务<Stream> DownloadDocumentInfoAsPdfAsync(用户登录用户){
尝试 {
var conversionOptions = 新 ConversionOptions {
边距 = 新的 MarginSettings(20, 5.5, 10, 5.5),
};
//从byte[]创建新的MemoryStream
返回新的 MemoryStream(_htmlToPdfConverter.ConvertHtml(html, conversionOptions));
}
}
//从上面的函数返回FileStream。
公共异步任务 <IActionResult>GenerateReport([FromRoute] string info) {
var 结果 = wait _mediator.Send(query);
return File(结果, "application/pdf", "employee.pdf"); //这将通过 500 INTERNAL SERVER ERROR
}
Dev*_*-er 22
如果您已验证您创建的流有效,则很有可能流的位置尚未重置为流的开头。这样做的结果是 FileStreamResult 尝试创建一个流,但从它的结束位置开始,没有找到任何其他数据,因此尝试写出一个空白流,这是错误的原因(这不会作为异常抛出)。
要解决此问题,您需要将正在使用的流重置为其起始位置。结果.Position = 0; 然后,在将 MemoryStream 写入 FileStreamResult 之前,该行会重置 MemoryStream。
// 在返回 FileStream 之前,将 MemoryStream 上的位置重置为 IActionResult() 函数的开头 结果.Position = 0; //返回文件(结果,"application/pdf","Employee.pdf")
| 归档时间: |
|
| 查看次数: |
3351 次 |
| 最近记录: |