[转载自简书] ASPNetCore上传大文件碰到的一些问题总结
上傳大文件碰到不少問題,總結(jié)一下。
?
先介紹一下功能:ajax上傳文件到NetCore的web api接口,
安裝在Linux服務器的服務端通過Nginx接受到后再存到文件服務器上。
如果文件不大,這個過程沒有任何問題,如果超過幾十M甚至幾百M就碰見不少問題。
1. 超時問題(timeout)
這個和NetCore無關,是ajax請求忘記設置timeout參數(shù)值,在網(wǎng)頁端加上即可。
2. Request body too large 錯誤
Post的body大概超過30m就會報這個錯誤,完整的錯誤是Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Request body too large
解決的方法有二種,一種是在請求的函數(shù)前加Attribute
還有一種方法是全局增加請求body的大小或者不限body的大小。
public static IWebHost BuildWebHost(string[] args) {var config = new ConfigurationBuilder().AddCommandLine(args).Build();return WebHost.CreateDefaultBuilder(args).UseConfiguration(config) .UseStartup<Startup>().UseKestrel(options => { //所有controller都不限制post的body大小 options.Limits.MaxRequestBodySize = null; }) .Build(); }3. Multipart body length limit 134217728 exceeded錯誤
Post的body大概超過100多M會碰到這個錯誤,完整的錯誤信息是 System.IO.InvalidDataException: Multipart body length limit 134217728 exceeded. 。
解決的方法是在startup.cs添加代碼:
4. Nginx限制上傳大小的錯誤
通過Nginx端口映射,請求會先經(jīng)過Nginx,也需要額外再設置一個參數(shù)client_max_body_size,否則上傳大文件也會有問題
location ^~ /sample2/ {rewrite ^/sample2/(.*)$ /$1 break; proxy_pass http://localhost:5556;client_max_body_size 300m; #最大接受300m文件以內(nèi)的 }5. 上傳七牛大文件問題
使用七牛的SDK上傳一般小文件很簡單,但是上傳大文件就需要使用分片上傳了,否則會返回錯誤-256錯誤
以下是正常上傳和分片上傳的2個函數(shù),大家可以參考
轉(zhuǎn)載于:https://www.cnblogs.com/ydchw/p/10840198.html
總結(jié)
以上是生活随笔為你收集整理的[转载自简书] ASPNetCore上传大文件碰到的一些问题总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教你彻底学会Java序列化和反序列化
- 下一篇: js面向对象编程:this究竟代表什么?