所以我想按日期对图像进行排序,为此,我想像这样自动为每天创建一个文件夹:
var fs = require('fs');
router.post('/add/image',function (req, res, next) {
// check if folder exist or not; if not, create one
var dir = './uploads/gallery/'+ the date the file is uploading;
if (!fs.existsSync(dir)){
fs.mkdirSync(dir); // create a new folder
}
// then here I want to upload the image to the server to the folder i just created
var upload = multer().single('avatar');
upload(req, res, function (err) {
})
and then save in database
let image = new Images();
image.path = req.file.path;
image.text = req.body.text;
image.save(function (err) {
if (err) {
throw err;
} else {
req.flash('success', 'Image added');
res.redirect('/media/gallery/image');
}
});
});
我该怎么做?
Multer具有一项功能,您可以将内存中的上载文件作为缓冲区,并随便使用它。
文档(强烈推荐您阅读了此内容):https://www.npmjs.com/package/multer#memorystorage
我已经基于此修改了您发布的代码(虽然我没有运行它,但我可以看到您已经发布了伪代码行,例如您在其中定义目录路径的位置)。上传;我假设您正在使用的代码中不存在不相关的错误):
var fs = require('fs');
const multer = require('multer');
//prepare multer for memory storage
const multerMemoryStorage = multer.memoryStorage();
const uploadToMemory = multer({
storage: multerMemoryStorage
})
router.post('/add/image',function (req, res, next) {
// check if folder exist or not; if not, create one
var dir = './uploads/gallery/'+ the date the file is uploading;
if (!fs.existsSync(dir)){
fs.mkdirSync(dir); // create a new folder
}
// then here I want to upload the image to the server to the folder i just created
var upload = uploadToMemory.single('avatar');
upload(req, res, function (err) {
if(err){
console.error(`SOME ERROR IN UPLOADING FILE: ${e.message}`);
} else {
const filename = `myNewImg-${Date.now().toString()}.jpg`; //just adding an epoch at the end of the filename to make it unique
//for single upload, you will get the buffer in req.file.buffer
fs.writeFileSync(`${dir}/${filename}`,req.file.buffer);
}
})
and then save in database
let image = new Images();
image.path = req.file.path;
image.text = req.body.text;
image.save(function (err) {
if (err) {
throw err;
} else {
req.flash('success', 'Image added');
res.redirect('/media/gallery/image');
}
});
});
注意,如果文件很大,这可能是[[not]的理想解决方案,因为整个文件在写入之前就已加载到内存中,并且服务器将需要有大量可用内存来处理那些文件。
让我知道您是否对此解决方案有任何疑问。