nuxt3 server 解决接收formdata数据并将图片保存到本地

365 阅读1分钟

这个事情挺痛苦的,起因,在做博客,想用java做后台,但是java不太熟悉,做图片上传的时候,图片成功保存到本地,但是tomcat报错,c盘xx文件夹/xxx000000.tmp(系统找不到指定文件)
一直打断点,直到return也没报错,图片成功保存但是这个报错蛮神奇的,各种方法都行不通,无奈捡起了nodejs
今天在尝试使用nuxt3的server做api,结果死活拿不到formdata数据,市面上资料也比较少,搞了一下午终于是解决了
npm install formidable

// 这是封装的方法,暂时忽略这个any
const readFiles = (e: H3Event): Promise<any> => {
  return new Promise((res, rej) => {
    const form = formidable();

    form.parse(e.node.req, (err, field, files) => {
      if (err) rej(err);
      res({
        field, // formdata传递的数据
        files // formdata传递的文件
      })
    })
  })
}

export default defineEventHandler(async (e) => {
  const res = await readFiles(e);
  // 返回的数据是,比如field {title:["传递的标题"]}
  const { title: [title], essay: [essay], type: [type] } = res.field;
  const { imgFile: [imgFile] } = res.files;
  // 获取文件后缀名
  const fix = imgFile.originalFilename.split(".").at(-1);
  fs.readFile(imgFile.filepath,(err,data) => {
    if(!fs.existsSync(path.resolve("public/essayBack"))){
      fs.mkdirSync(path.resolve("public/essayBack"),{
        recursive:true // 创建目录,如果父级目录不存在则创建
      })
    }
    fs.writeFile(path.resolve("public/essayBack")+`/${new Date().getTime()}.${fix}`,new Uint8Array(data),(err) => {
      console.log(err);
    })
  })
})

在nuxt中不可以使用__dirname,不知道为什么,有懂的大佬讲讲吗,还有,一个人学习好无聊,有人要一起组建一个内卷小分队吗,球球热

插一个题外话,大佬们有没有遇到过,api测试工具无法对server api进行调试,报错无法连接
nuxt.config.ts中,devServer.host = "0.0.0.0"即可