接上文
import formidable from "formidable";
import type { H3Event } from "h3";
import { post } from "~/server/utils/fetch";
import fs from "fs"
const readFiles = (e: H3Event): Promise<any> => {
return new Promise((res, rej) => {
const form = formidable({ multiples: true });
form.parse(e.node.req, (err, field, files) => {
if (err) rej(err);
res({
field, // 字段
files // 文件
})
})
})
}
export default defineEventHandler(async (e) => {
const res = await readFiles(e);
const { title: [title], essay: [essay], type: [type] } = res.field;
const { imgFile: [imgFile] } = res.files;
if (!title) {
return R.error("", "title empty");
}
if (!essay) {
return R.error("", "essay empty");
}
if (!type) {
return R.error("", "type empty");
}
if (!imgFile) {
return R.error("", "imgFile empty");
}
const formdata = new FormData();
formdata.append("title", title);
formdata.append("type", type);
formdata.append("essay", essay);
// 报错 imgFile是一个字符串
formdata.append("imgFile", imgFile);
const resolve = await post("/essay/add", {
body: formdata,
})
return resolve;
})
昨天做的nodejs保存到本地,可以确定imgFile是一个File,但是今天想转发到spring boot,但是开始报错,然后各种console,typeof imgFile是object,typeof formdata.get("imgFile")是string
有大佬知道为什么吗
解决方法
formdata.append("imgFile", new Blob([fs.readFileSync(imgFile.filepath)]),imgFile.originalFilename);
将file文件转换为blob,然后手动设置文件名即可完美解决
一个文件上传做了三天,我咋这么菜(呜呜呜)还是要多练习啊,禁止摆烂!!!