.net core 导出Excel,pdf,word 后打不开的原因

默认情况下.net core 默认开启的是异步IO模式. 为了提高系统的处理速度, 会将文件分段发送到客户端.
这是问题的根源.
大文件被分成好几段发送到客户端, 接收方不一定是按照顺序存的.
所以Excel, pdf,word就打不开了.

解决方法是 把

Response.BodyWriter.WriteAsync(buffer)

换成

Response.Body.Write(buffer, 0, buffer.Length);

整体代码如下,

//Response.StartAsync();// Async 当文件超长时Async 会导致excel乱序
//Response.BodyWriter.WriteAsync(buffer);// Async 当文件超长时Async 会导致excel乱序
//Response.BodyWriter.WriteAsync(excelstring);// Async 当文件超长时Async 会导致excel乱序

Response.Body.Write(buffer, 0, buffer.Length); 
Response.Body.Flush();
Response.Body.Close(); 

报错时 记得要在Startup.cs文件中开启同步支持

public void ConfigureServices(IServiceCollection services)
{
    // If using Kestrel:
    //services.Configure<KestrelServerOptions>(options =>
    //{
    //    options.AllowSynchronousIO = true; // 解决大文件下载乱序的问题
    //});

    // If using IIS:
    services.Configure<IISServerOptions>(options =>
    {
        options.AllowSynchronousIO = true;// 解决大文件下载乱序的问题
    });
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值