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
相关产品推荐
相关产品推荐

