You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET 6 API接收PDF/图片文件遇阻,求解决方案及相关文档

ASP.NET 6 Web API 接收二进制文件(PDF/图片)解决方案

一、表单上传([FromForm] IFormFile)

你之前测试失败是因为Postman操作不符合表单上传的要求,正确步骤和代码如下:

接口代码

[HttpPost("upload-form")]
public async Task<IActionResult> UploadForm([FromForm] IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("未上传有效文件");
    
    // 读取文件流进行后续处理
    using var ms = new MemoryStream();
    await file.CopyToAsync(ms);
    ms.Position = 0;
    
    // 示例:获取文件信息
    var fileInfo = new 
    {
        Name = file.FileName,
        Size = file.Length,
        ContentType = file.ContentType
    };
    
    return Ok(fileInfo);
}

Postman操作步骤

  1. 选择POST请求,填入接口地址
  2. 切换到Body标签,选择form-data
  3. 键名填写和接口参数一致的名称(比如file),类型选择File
  4. 点击右侧文件选择按钮,上传你的PDF/图片,发送请求即可

二、直接接收二进制请求体

这种场景适用于不需要表单,直接把文件二进制内容放在请求体的情况,推荐两种实现方式:

方式1:直接读取HttpRequest.Body(最灵活)

不需要额外配置,直接从请求对象读取流,支持所有二进制媒体类型:

[HttpPost("upload-binary")]
public async Task<IActionResult> UploadBinary()
{
    if (Request.ContentLength == 0)
        return BadRequest("请求体为空");
    
    using var ms = new MemoryStream();
    await Request.Body.CopyToAsync(ms);
    ms.Position = 0;
    
    // 可通过Request.ContentType获取请求的媒体类型(如application/pdf、image/png)
    return Ok(new 
    {
        Size = ms.Length,
        ContentType = Request.ContentType
    });
}

Postman操作步骤

  1. 选择POST请求,填入接口地址
  2. 切换到Body标签,选择raw,然后从下拉菜单选Binary
  3. 点击「Select File」上传目标文件,发送请求

方式2:使用[FromBody] byte[](需配置格式化器)

如果偏好用参数接收,需要先在Program.cs中配置二进制输入格式化器:

builder.Services.AddControllers(options =>
{
    // 添加字节数组输入格式化器,支持二进制媒体类型
    options.InputFormatters.Insert(0, new ByteArrayInputFormatter());
});

接口代码:

[HttpPost("upload-byte")]
public IActionResult UploadByte([FromBody] byte[] fileBytes)
{
    if (fileBytes == null || fileBytes.Length == 0)
        return BadRequest("未上传有效内容");
    
    using var ms = new MemoryStream(fileBytes);
    // 后续处理逻辑...
    
    return Ok(new { Size = fileBytes.Length });
}

Postman操作和方式1一致,选raw->Binary上传文件即可。

关键概念澄清

  • [FromForm] IFormFile:仅支持multipart/form-data类型的请求,必须通过表单字段传递文件,不能直接接收纯二进制请求体。
  • [FromBody] 限制:ASP.NET默认只解析JSON、XML等结构化数据的媒体类型,对于二进制数据需要手动添加对应的输入格式化器,否则会返回「媒体类型不支持」。
  • Request.Body:请求体的原始流,不受默认格式化器限制,是处理纯二进制请求最直接的方式。

内容的提问来源于stack exchange,提问作者DerSeestern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:51:31