Blazor WebAssembly中使用MemoryStream时如何包含文件名及扩展名
Blazor WebAssembly 传递MemoryStream时附带文件名及扩展名的解决方案
要在传递MemoryStream的同时把文件名和扩展名传给API端点,最直接的方式是使用MultipartFormDataContent包装文件流和文件名,API端可直接解析出完整文件信息。
修改前端提交代码
更新OnSubmit方法,将文件流与文件名封装到表单数据中:
private async Task OnSubmit() { try { if (selectedFile != null) { using (var memoryStream = new MemoryStream()) { await selectedFile.Stream.CopyToAsync(memoryStream); memoryStream.Position = 0; // 创建表单数据容器 var formContent = new MultipartFormDataContent(); // 包装文件流并指定完整文件名(含扩展名) var fileContent = new StreamContent(memoryStream); formContent.Add(fileContent, "uploadedFile", selectedFile.Name); // 调用API端点,替换为你的实际接口地址 var response = await httpClient.PostAsync("/api/files/upload", formContent); response.EnsureSuccessStatusCode(); } } else { Console.WriteLine("未选择文件"); } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
API端点接收代码
后端API控制器通过IFormFile接收文件,自动获取文件名及扩展名:
[ApiController] [Route("api/files")] public class FilesController : ControllerBase { [HttpPost("upload")] public async Task<IActionResult> UploadFile(IFormFile uploadedFile) { if (uploadedFile == null || uploadedFile.Length == 0) { return BadRequest("无效文件"); } // 获取完整文件名(含扩展名) string fullFileName = uploadedFile.FileName; // 示例:将文件保存到本地 var savePath = Path.Combine("uploads", fullFileName); using (var stream = new FileStream(savePath, FileMode.Create)) { await uploadedFile.CopyToAsync(stream); } return Ok(new { Message = "上传成功", FileName = fullFileName }); } }
关键说明
selectedFile.Name本身已包含文件名和扩展名,直接传递即可。MultipartFormDataContent是HTTP文件上传的标准方式,兼容性强,API端解析简单。- 若需传递额外参数,可在
MultipartFormDataContent中添加StringContent类型的项。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

