上传文件时未创建文件夹

发布于 2025-01-19 10:53:51 字数 1642 浏览 1 评论 0原文

我正在尝试将PDF/XLS/XLSX上传到文件服务器上,但是每当我尝试使用FormData在后端发送文件时,就不会创建文件夹,也不会上传文件。

这是我的前端(VUE)的代码:

let toSubmit = {
    document_title: this.document_title.toUpperCase(),
    added_by: this.userInfo.employeeCode,
    FileName: `${this.document_title.replace(/ +/g, "_").toUpperCase()}.${this.$refs.files.files[0].name.split(".").pop().toLowerCase()}`
}

const formData = new FormData

formData.append("toSubmit", JSON.stringify(toSubmit))

_.forEach(this.uploadFiles, file=>{
    formData.append("files", file)
})

const url = `${this.api}add/template/document`
axios.post(url, formData, {
    headers: {
        'Content-Type': 'multipart/form-data',
        dataType: 'json',
    }
}).then(res=>{
    console.log('document template', res.data)
})

在我的后端,我使用Multer上传文件,但我不知道问题是否在于Multer本身,或者我的代码中是否缺少一些东西。无论如何,这是我的后端(节点)的代码:

api

router.post("/add/template/document", uploadTemplate.array("files"), (req, res)=>{
  let myData = JSON.parse(req.body.toSubmit)
  res.send(myData)
})

上传

const uploadTemplate = multer({storage: storageTemplate});
const storageTemplate = multer.diskStorage({
  destination: (req, file, cb) => {
    var dir = `./uploads/DocumentTemplates/`;
    if (!fs.existsSync(dir)){
      fs.mkdirSync(dir);
    }
    cb(null, dir);
  },
  filename: function(req, file, cb){
    let myData = JSON.parse(req.body.toRequest);
    let fileName = myData.FileName
    let new_filename = `${fileName}`
    cb(
      null,
      new_filename
    )
  }
})

我仍然不知道为什么不创建文件夹。我想念什么吗?

I am trying to upload pdf/xls/xlsx on the file server but whenever I try to send the file on my back end using FormData, no folder is being created and the file isn't uploaded either.

Here is my code on the front end (Vue):

let toSubmit = {
    document_title: this.document_title.toUpperCase(),
    added_by: this.userInfo.employeeCode,
    FileName: `${this.document_title.replace(/ +/g, "_").toUpperCase()}.${this.$refs.files.files[0].name.split(".").pop().toLowerCase()}`
}

const formData = new FormData

formData.append("toSubmit", JSON.stringify(toSubmit))

_.forEach(this.uploadFiles, file=>{
    formData.append("files", file)
})

const url = `${this.api}add/template/document`
axios.post(url, formData, {
    headers: {
        'Content-Type': 'multipart/form-data',
        dataType: 'json',
    }
}).then(res=>{
    console.log('document template', res.data)
})

And on my back-end, I used multer for uploading the file but I have no idea if the problem lies on multer itself or if I have something missing in my code. Anyway, this is my code on the back end (Node):

API

router.post("/add/template/document", uploadTemplate.array("files"), (req, res)=>{
  let myData = JSON.parse(req.body.toSubmit)
  res.send(myData)
})

Uploading

const uploadTemplate = multer({storage: storageTemplate});
const storageTemplate = multer.diskStorage({
  destination: (req, file, cb) => {
    var dir = `./uploads/DocumentTemplates/`;
    if (!fs.existsSync(dir)){
      fs.mkdirSync(dir);
    }
    cb(null, dir);
  },
  filename: function(req, file, cb){
    let myData = JSON.parse(req.body.toRequest);
    let fileName = myData.FileName
    let new_filename = `${fileName}`
    cb(
      null,
      new_filename
    )
  }
})

I still can't figure out why no folder is being created. Am I missing something?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

卷耳 2025-01-26 10:53:51

您正在创建一个没有递归标志的子文件夹,这就是为什么也没有创建文件夹

,在Multer Mifdware中没有body,仅file> file,因此您无法发送自定义数据要这样的文件,您需要更改上传中件

  1. 以创建子文件夹,添加此标志:
fs.mkdirSync(dir, {recursive: true});
  1. multer中没有任何正义,请使用file> file(您可以添加模拟物验证,检查,检查仅上传某些类型):
  filename: function(req, file, cb){
    
    console.log('file', file);

    // validate expected file against file.mimetype
    // if it fails, return error: cb(yourErrorMessage, null);

    cb(
      null,
      file.originalname // handle on front-end
    )
  }

在前端:

formData.append("files", file, 'filename goes here');

you're creating a subfolder without recursive flag, that's why the folder is not created

also, there is no body in multer middleware, only file, so you cannot send custom data to file like that, you need to change upload middleware

  1. to create subfolders, add this flag:
fs.mkdirSync(dir, {recursive: true});
  1. there is no body in multer, use file (you can add mimetype validation, check that only certain types are uploaded):
  filename: function(req, file, cb){
    
    console.log('file', file);

    // validate expected file against file.mimetype
    // if it fails, return error: cb(yourErrorMessage, null);

    cb(
      null,
      file.originalname // handle on front-end
    )
  }

and on the frontend:

formData.append("files", file, 'filename goes here');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文