ASPP.NET CORE WEBAPI:文件上传错误:System.IO.InvalidDataException:超过多部分正文长度限制 16384

Posted

技术标签:

【中文标题】ASPP.NET CORE WEBAPI:文件上传错误:System.IO.InvalidDataException:超过多部分正文长度限制 16384【英文标题】:ASPP.NET CORE WEBAPI : File upload error : System.IO.InvalidDataException: Multipart body length limit 16384 exceeded 【发布时间】:2022-01-05 05:33:43 【问题描述】:

我正在尝试使用 asp.net core Webapi 和 postman 上传和处理文件。

这是控制器后端的代码:

using System;
using Microsoft.AspNetCore.Mvc;
using System.IO;
namespace Learn_Core_API.Controllers

public class HomeController : Controller

    [Route("")]
    public IActionResult Index()
    
        return View();
    

    [HttpPost("add_file")]
    [RequestFormLimits(ValueLengthLimit = int.MaxValue, MultipartBodyLengthLimit = int.MaxValue)]

    public string Upload([FromBody]Microsoft.AspNetCore.Http.IFormFile File)
    
        var files = HttpContext.Request.Form.Files;
        var uploadDirecotroy = "uploads/";
        var uploadPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, uploadDirecotroy);
        if (!System.IO.Directory.Exists(uploadPath))
            Directory.CreateDirectory(uploadPath);

        var fileName = Guid.NewGuid() + System.IO.Path.GetExtension(File.FileName);
        var filePath = System.IO.Path.Combine(uploadPath, fileName);
        return fileName;
    


这里是 startup.cs 文件中用于配置上传的代码:

// This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    
        services.AddControllers();
        services.AddMvc();
        services.AddDbContext<Learn_Core_API.Models.ReunionDbContext>(options => options.UseSqlServer(ConnectionString));
        services.Configure<FormOptions>(x =>
        
            x.MultipartBodyLengthLimit = 10000000000;
        );
    

以下是邮递员的屏幕截图,其中包含发出的请求、发送的 http 标头 和服务器发回的 Http 响应 错误:

请求标头

请求正文

如你所见,我得到了错误:

System.IO.InvalidDataException: Multipart body length limit 16384 exceeded.

有什么想法吗? 谢谢。

【问题讨论】:

你可以先试试这个帖子里的解决方案,可能对你有帮助:***.com/questions/55582335/… 【参考方案1】:

试试看:

[HttpPost("add_file")]
[DisableRequestSizeLimit] //<======= add this line
[RequestFormLimits(ValueLengthLimit = int.MaxValue, MultipartBodyLengthLimit = int.MaxValue)]

public string Upload([FromForm]IFormFile file) //<=== change it to 'FromForm'

         if (file == null || file.Length < 1)
                return BadRequest("file is empty");
         await using (Stream fileStream = new FileStream("Your path ...", FileMode.Create))
          
                await file.CopyToAsync(fileStream);
          
        return Ok();

iis web.config:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="2147483648" />
    </requestFiltering>
  </security>
</system.webServer>

nginx

http 
    ...
    client_max_body_size 2G;

【讨论】:

仍然有同样的错误。 @thesmartlife 在您的本地主机或服务器中?如果服务器你的网络服务器是什么? iis? nginx? 我正在使用 iis express @thesmartlife 你在本地也有问题? 是的,我在本地主机上测试它。

以上是关于ASPP.NET CORE WEBAPI:文件上传错误:System.IO.InvalidDataException:超过多部分正文长度限制 16384的主要内容,如果未能解决你的问题,请参考以下文章

由于请求正文过大,大文件上传到 ASP.NET Core 3.0 Web API 失败

在 ASP.NET Core 1.0 上处理大文件上传

我使用 .net core webapi 怎么获取图片并存到本地磁盘去

如何使用WEB API Dot net core实现文件上传?

使用 Asp.Net Core Web API 文件上传文件始终为空

.NET Core Web API 中的图像上传