使用 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 上传文件并在解析和上传到数据库之前将其短暂存储在内存中