express fileupload:没有这样的文件或目录

时间:2019-04-08 16:45:59

标签: node.js express

我正在使用快递文件包。我这样使用它:

const upload = require('express-fileupload');
app.use(upload({
    createParentPath: true
}));

这是我的存储方式:

await req.files.main_image.mv('./public/images/movies/'+main_image);

我已经创建了public / images目录。我的public / images目录中没有电影目录。

当它起作用时:如果我已经创建了/ public / images / movies目录,则它起作用了

它不起作用:如果我没有创建/ public / images / movies目录,但是有/ public / images目录。然后它说:

  

ENOENT:没有这样的文件或目录,请打开   'C:\ Users \ glagh \ Desktop \ Work \ MoviesAdviser \ public \ images \ movies \ 1554741546720-8485.11521.brussels.the-hotel-brussels.amenity.restaurant-AD3WAP2L-13000-853x480.jpeg

该怎么做才能自动创建/ movies目录并将图像放置在其中?

1 个答案:

答案 0 :(得分:0)

Express-fileupload使用以下code创建传递给.mv函数的目录路径:

const checkAndMakeDir = function(fileUploadOptions, filePath){
  //Check upload options were set.
  if (!fileUploadOptions) return false;
  if (!fileUploadOptions.createParentPath) return false;
  //Check whether folder for the file exists.
  if (!filePath) return false;
  const parentPath = path.dirname(filePath);
  //Create folder if it is not exists.
  if (!fs.existsSync(parentPath)) fs.mkdirSync(parentPath); 
  return true;
};

问题是fs.mkdirSync()不会使用您指定的父目录创建完整路径(请注意,您将在外壳上使用mkdir -p来创建整个文件夹结构)->结帐{ {3}},以获取更多信息。

您可以做的是使用fs-extra之类的模块,并使用其How to create full path with node's fs.mkdirSync? ensureDir,该模块会在调用{之前创建相应的父目录(如果尚不存在) {1}}功能。 或者,如果您的节点版本> = 10,则使用本机.mv()选项,您可以将其传递给{rescursive:true}