Eggjs 使用ctx.getFileStream进行文件上传
最近在使用eggjs上传文件时,无法获取到前端定义的字段,一直为空,在此记录一下
前端代码
handleRequest(param) {
let fileObj = param.file;
// FormData 对象
let form = new FormData();
// 文件对象
form.append('bizId', this.apartment.id);
form.append('bizType', '1');
form.append('file', fileObj); // 注意这个地方移动要放append到最后面
fileApi.uploadSave(form).then((res) => {
//...
})
},
后端
// 使用了案例云的OSS
async ossStreamSave() {
const { ctx } = this;
try {
// ★★★★★ 提示,前端 formData.append(‘filename’, file) 必须放到最后,否则ctx.getFileStream()取流完成时stream.fields仍然是空的
let stream;
stream = await ctx.getFileStream();
const params = {
bizId: stream.fields.bizId,
bizType: stream.fields.bizType,
url: '',
submittedFileName: stream.filename,
contextType: stream.mimeType,
ext: stream.filename.split('.')[1],
};
const uid = UUID.v4();
const name = 'tks/' + path.basename(`${uid}.${params.ext}`);
const result = await client.put(name, stream);
params.url = result.url;
const res = await ctx.model.TksFile.create(params);
return res;
} catch (err) {
return false;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。