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

ASP.NET Core后端如何接收fetch()上传的二进制文件流?

后端接收单文件流的参数类型方案

方案1:用Stream作为方法参数

直接把Upload方法的参数设为Stream,ASP.NET Core会自动把请求体绑定到这个流对象,你可以直接读取文件内容。

修改后的控制器代码:

[ApiController]
[Route("[controller]")]
public class UploadController : ControllerBase
{
    [HttpPost]
    public async Task<UploadResponse> Upload(Stream fileStream)
    {
        // 示例:把流转成字节数组,实际业务里可以写入文件、解析内容等
        using var memoryStream = new MemoryStream();
        await fileStream.CopyToAsync(memoryStream);
        var fileBytes = memoryStream.ToArray();

        return new UploadResponse
        {
            SomeProperty = "some value"
        };
    }
}

方案2:通过Request.Body读取流

要是不想加参数,也可以直接从Request.Body拿请求体的流,这种方式更灵活:

[ApiController]
[Route("[controller]")]
public class UploadController : ControllerBase
{
    [HttpPost]
    public async Task<UploadResponse> Upload()
    {
        using var memoryStream = new MemoryStream();
        await Request.Body.CopyToAsync(memoryStream);
        var fileBytes = memoryStream.ToArray();
        // 这里处理文件内容

        return new UploadResponse
        {
            SomeProperty = "some value"
        };
    }
}

额外注意点

  • 前端直接传file对象时,请求的Content-Type会自动设为文件的MIME类型(比如图片是image/png),ASP.NET Core默认支持这种请求体绑定。
  • 尽量用异步方法(async Task<T>)处理流操作,别阻塞线程。
  • 如果需要文件名、文件类型这些元数据,得让前端通过请求头传,比如前端加这几行:
    const response = await fetch("https://localhost:5333/upload", {
        method: 'POST',
        headers: {
            'X-File-Name': file.name,
            'X-File-Type': file.type
        },
        body: file
    });
    
    后端就能通过Request.Headers获取:
    var fileName = Request.Headers["X-File-Name"].ToString();
    var fileType = Request.Headers["X-File-Type"].ToString();
    

内容的提问来源于stack exchange,提问作者me.at.coding

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:40:10