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 也有流上传。
关于您的代码,代码 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);
我使用 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 也有流上传。
关于您的代码,代码 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);