Загрузить каталог на основе данных полей формы в грозном? - PullRequest
0 голосов
/ 04 марта 2020

При загрузке файлов (изображений для объекта Project) я хотел бы создать новый подкаталог Linux в / public / images для каждого идентификатора проекта, в котором будут храниться его изображения. Однако изображения сразу сохраняются в каталоге, указанном ранее. Я могу указать идентификатор проекта (который находится в запросе). Есть ли способ сделать это с огромным или, возможно, 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", () => {});

    });

Спасибо.

1 Ответ

0 голосов
/ 04 марта 2020

Решил сам со следующим. Обычно я перемещаю файл по назначению.

    // 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", () => {});

    });
};



...