nuxt3 server转发请求上传文件,java报错不能将string类型转换为文件类型

187 阅读1分钟

接上文

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,然后手动设置文件名即可完美解决
一个文件上传做了三天,我咋这么菜(呜呜呜)还是要多练习啊,禁止摆烂!!!