使用 multer 上传的文件存储在云端后如何删除?

Posted

技术标签:

【中文标题】使用 multer 上传的文件存储在云端后如何删除?【英文标题】:How to delete files uploaded with multer once they are stored in the cloud? 【发布时间】:2021-01-12 11:24:47 【问题描述】:

我使用 multer 将文件上传到 Express 服务器。它们被解析并存储到 Cloudinary。到目前为止,一切都很好。但是,所有文件都存储在我服务器上的上传文件夹中,并且在我不需要它们时会占用大量空间。上传到 cloudinary 完成后如何删除这些文件?

这是上传文件夹的截图:

代码如下:

const express = require("express");
const router = express.Router();
const cloudinary = require("cloudinary").v2;
const multer = require("multer");
const fs = require("fs");

// multer config
const dest = "uploads/";
const limits =  fileSize: 1000 * 1000 * 4 ; // limit to 4mb
const upload = multer( dest, limits );

// upload image
router.post("/upload-images", upload.array("image"), (req, res) => 
  const  images  = req.files;
  const  userId  = req.body;
  try 
    if (images) 
      images.forEach(file => 
        cloudinary.uploader.upload(
          file.path,
          
            resource_type: "image",
            public_id: `myapp/users/$userId/$file.originalname`
          ,
          (err, res) => 
            if (err) 
              return fs.unlinkSync(file.path);
            
            fs.unlinkSync(file.path);
            return res.secure_url
          
        );
      );
    
   catch (err) 
    return res.json(err);
  
);

【问题讨论】:

【参考方案1】:

优化这一点的最佳方法是不要将数据存储在本地然后上传,只需上传您在 API 中获取的缓冲区数据。大多数云存储提供商都有,cloudinary 也有流式上传。

https://support.cloudinary.com/hc/en-us/community/posts/360007581379-Correct-way-of-uploading-from-buffer-

关于您的代码,代码 LGTM。问题可能是您的代码引发了一些异常,并且代码fs.unlinkSync(file.path) 永远无法到达。

【讨论】:

【参考方案2】:

您只需在您的 api 中添加此代码

            let resultHandler = function (err) 
                if (err) 
                    console.log("unlink failed", err);
                 else 
                    console.log("file deleted");
                
            

            fs.unlink(req.file.path, resultHandler);

【讨论】:

以上是关于使用 multer 上传的文件存储在云端后如何删除?的主要内容,如果未能解决你的问题,请参考以下文章

nodejs multer diskstorage在保存到磁盘后删除文件

在使用 Multer 将文件上传到文件夹之前删除和创建文件夹

使用 Multer 上传文件并在解析和上传到数据库之前将其短暂存储在内存中

使用 multer 将多个图像上传到 AWS S3

如何使用 Multer 在 MERN Stack 应用程序中上传图像文件

react上传图片文件到服务器——其他类似——multer修改后缀名后存储——返回静态资源