node.js - NodeJS / Multer:如何用新文件替换目录中的现有文件
问题描述
我想在上传新文件时替换目录中的现有文件,我正在使用nodeJS和multer,想法是读取目录内容,删除它然后上传新文件。
const express = require('express')
const router = express.Router()
const authorize = require('_middleware/authorize')
const Role = require('_helpers/role')
const uploadImage = require("./uploadAdvertising")
const fs = require('fs')
const uploadDir = '/public/advertising/'
// routes
router.post('/', authorize(Role.Admin), uploadImage, createAdvertising);
module.exports = router;
async function createAdvertising(req, res, next) {
fs.readdir(global.__basedir + uploadDir, ((err, files) => {
if (err) throw err
for (const file of files){
fs.unlink(global.__basedir + uploadDir + file, err => {
if (err) throw err;
});
}
}))
if (!req.file) return res.status(412).send({
message: `image is required`,
});
uploadImage(req, res)
.then(data => {
return res.status(201).send({
message: 'Advertising image saved'
})
}).catch(err => {
return res.status(500).send({
message: `Could not upload the file, ${err}`,
});
})
}
穆尔特
const util = require("util");
const multer = require("multer");
const maxSize = 10 * 1024 * 1024;
const uploadDir = '/public/advertising/'
const fs = require('fs')
let storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, global.__basedir + uploadDir)
req.uploadDirectory = global.__basedir + uploadDir
},
filename: (req, file, cb) => {
cb(null, file.originalname)
},
});
let uploadImage = multer({
storage: storage,
fileFilter: (req, file, cb) => {
//reject
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
cb(null, true)
} else {
cb(new Error("image should be png or jpeg extension"), false)
}
},
limits: {fileSize: maxSize},
}).single("imageAdvertising");
let uploadFileMiddleware = util.promisify(uploadImage);
module.exports = uploadFileMiddleware;
有人可以看看并告诉这段代码有什么问题!它会删除所有内容,甚至是新上传的文件!
解决方案
只需在 multer 文件中尝试这样
注意:将上传文件的路径写入unlinkSync
和readdirSync
fileFilter: (req, file, cb) => {
let files = fs.readdirSync('write the path');
if(files.includes(file.originalname)){
fs.unlinkSync('pwrite the pathath'+ file.originalname);
}
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
cb(null, true)
} else {
cb(new Error("image should be png or jpeg extension"), false)
}
}
并删除像createAdvertising
文件这样的额外代码
推荐阅读
- php - PHP:如何将 dBase 文件从内存写入 FTP
- php - PHP 循序渐进
- coq - 在 epose 或 eset 之后应用策略
- python - 如何使这个朋友请求基于类的视图工作?
- javascript - 让 VueI18n 对路由器链接标签做出反应
- kubernetes - 何时偏爱初始化器与变异 Webhook
- c# - 读取 XML 并将其保存在 C# Winform 应用程序中的快速简便的方法
- scala - 为什么 Akka HTTP 不匹配我的 JSON 正文?
- python - 如何抓取使用 JavaScript 呈现数据的网站
- node.js - 在expressjs中使用Knex插入后如何正确重定向