最近做项目需要用户在前端将数据文件上传,服务器解析数据文件将数据保存到数据库。看起来很简单的需求,实现起来一直报错:https://stackoverflow.com/questions/76103063/failed-to-read-the-request-form-unexpected-end-of-stream-the-content-may-have
现在将实现方法贴上:
前端
const upload = (event: any) => {
debugger
var e = window.event || event
console.log(e)
// 获取当前选中的文件
var File = e.target.files[0]
console.log(File) //打印值看下面图片,简单点的话我们直接把这个数据给后台处理就可以了
var formData = new FormData()
formData.append('file', event.target.files[0])
uploadMaterials(formData)
}
export async function uploadMaterials(file: any) {
const headers = {
// 'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryxyz',
}
return http.postWithHeaders('/Product/UploadProducts', headers, file)
}
注意这里header为空(有些帖子说设置Content-type,但是看起来应用到asp.net core 有点问题)
后端设置
[HttpPost("UploadProducts")]
[Consumes("multipart/form-data")]
public async Task<string> UploadProducts([FromForm] IFormFile file)
{
string uploads = Path.Combine(_hostingEnvironment.ContentRootPath, "uploads");
string filePath = Path.Combine(uploads, file.FileName);
using (Stream fileStream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(fileStream);
}
return file.FileName;
}
注意这个入参名称,要和前端formdata.append传入的第一个值相同。