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