multer上传的文件存到云端后如何删除?

How to delete files uploaded with multer once they are stored in the cloud?

我使用 multer 将文件上传到 Express 服务器。它们被解析并存储到 Cloudinary。到目前为止,一切都很好。但是,所有文件都存储在我服务器上的一个上传文件夹中,在我不需要它们的时候占用了很多 space。上传到 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);
  }
});

最好的优化方法是不要把数据存到本地再上传,直接上传你在API中得到的buffer数据。大多数云存储提供商都有,cloudinary 也有流上传。

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

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

您只需在 api

中添加此代码
            let resultHandler = function (err) {
                if (err) {
                    console.log("unlink failed", err);
                } else {
                    console.log("file deleted");
                }
            }

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