Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于表单字段数据上传目录?_Javascript_Node.js_Express_Formidable - Fatal编程技术网

Javascript 基于表单字段数据上传目录?

Javascript 基于表单字段数据上传目录?,javascript,node.js,express,formidable,Javascript,Node.js,Express,Formidable,上载文件(项目实体的图像)时,我希望为每个项目ID在/public/images中创建一个新的Linux子目录,以存储其图像。但是,在我可以指定项目ID(在请求中)之前,图像会立即保存到提供的目录中。有没有一种方法可以用强大的或者可能是multer做到这一点 // Upload Image router.post("/project_image", function(req, res, next) { const form = new IncomingForm({

上载文件(项目实体的图像)时,我希望为每个项目ID在/public/images中创建一个新的Linux子目录,以存储其图像。但是,在我可以指定项目ID(在请求中)之前,图像会立即保存到提供的目录中。有没有一种方法可以用强大的或者可能是multer做到这一点

    // Upload Image
    router.post("/project_image", function(req, res, next) {

      const form = new IncomingForm({
        uploadDir: process.cwd() + "/public/images", // <- e.g. I would like this to be `/public/images/${req.body.project_id}`
        keepExtensions: true
      });
      form.parse(req);
      let project;

      form.on("field", (name, value) => {
        project = JSON.parse(value);
      });

      form.on("file", (field, file) => {

        let path = file.path;
        let fileName = path.substr(path.lastIndexOf("upload"));

        return req.db
          .from("projects")
          .where("id", "=", project.project_id)
          .update({ image: "/images/" + fileName })
          .then(() => {
            return res.status(200).json({
              message: "Image Upload Successful",
              error: false
            });
        })

      form.on("end", () => {});

    });
//上传图像
router.post(“/project\u image”),函数(req、res、next){
常数形式=新收入形式({
uploadDir:process.cwd()+“/public/images”,//{
project=JSON.parse(值);
});
表单.on(“文件”,(字段,文件)=>{
让path=file.path;
让fileName=path.substr(path.lastIndexOf(“上传”);
返回请求.db
.来自(“项目”)
.where(“id”,“=”,project.project\u id)
.update({image://“+fileName})
.然后(()=>{
返回res.status(200).json({
消息:“图像上传成功”,
错误:false
});
})
形式.on(“end”,()=>{});
});

谢谢。

我自己用以下方法解决了这个问题。基本上,我会将文件移动到预定的目的地

    // Upload Image
    router.post("/project_image", function(req, res, next) {
      const directory = process.cwd() + "/public/images";
      const form = new IncomingForm({
        uploadDir: directory, 
        keepExtensions: true
      });
      form.parse(req);
      let project;

      form.on("field", (name, value) => {
        project = JSON.parse(value);
      });

      form.on("file", (field, file) => {

        let path = file.path;
        let fileName = path.substr(path.lastIndexOf("upload"));
        let destinationPath = directory + `/${project.project_id}/`;

        if (fs.existsSync(destinationPath)) {
          moveFile(path, destinationPath);
        } else {
          fs.mkdirSync(directory + `/${project.project_id}/`);
          moveFile(path, destinationPath);
        }

        return req.db
          .from("projects")
          .where("id", "=", project.project_id)
          .update({ image: "/images/" + fileName })
          .then(() => {
            return res.status(200).json({
              message: "Image Upload Successful",
              error: false
            });
        })

      form.on("end", () => {});

    });
};