node.js - 如何在nodejs中创建一个使用用户名名称的目录
问题描述
我正在使用nodeJS(express)上传任务,目标是上传一个包含一些mp4文件的zip文件,如果不存在,我想在一个使用用户名(req.user)的目录中提取zip内容,或者如果它存在,我不需要重新创建它,只需将 zip 内容放入其中。
可以从技术上解释如何做到这一点,我完成了上传和提取过程,但需要深入了解如何完成这项任务,我的应用程序连接了数千个用户。
上传.js
const util = require("util");
const multer = require("multer");
const maxSize = 10*1024*1024;
let storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, __basedir + "/resources/static/assets/uploads/zip");
},
filename: (req, file, cb) => {
req.zipFilePath = __basedir + "/resources/static/assets/uploads/zip/" + file.originalname
cb(null, file.originalname);
},
});
let uploadFile = multer({
storage: storage,
limits: {fileSize: maxSize},
}).single("zipFile");
let uploadFileMiddleware = util.promisify(uploadFile);
module.exports = uploadFileMiddleware;
操作控制器
async function upload(req, res) {
console.log(req.user)
const account = await getAccount(req.user.id);
uploadFile(req, res).then(data => {
fs.createReadStream(req.zipFilePath)
.pipe(unzipper.Extract({path: __basedir + "/resources/static/assets/unzipped"}))
.on('close', function (entry) {
fs.readdir(__basedir + "/resources/static/assets/unzipped", (err, files) => {
fs.unlink(req.zipFilePath, function (e) {
if (e) throw e;
});
return res.status(200).send({
message: "Uploaded the file successfully: " + req.file.originalname,
});
});
});
}
).catch(err => {
return res.status(500).send({
message: `Could not upload the file, ${err.message}`,
});
})
}
解决方案
您可以使用该用户名检查目录是否存在,但有一个问题,因为可能存在同名的用户。因此,为每个用户使用 uniqueID,如果您有新用户,请创建一个新目录。
var fs = require('fs');
var dir = `resources/static/assets/unzipped/${req.username}`;
if (!fs.existsSync(dir)){
fs.mkdirSync(dir); //create new directory and write to it.
}
else {
// write stream to existing dir
}
推荐阅读
- python - 更改从 Pandas DataFrame 渲染的图像的显示大小
- reactjs - React 应用程序,为应用程序获取路由的 API 调用
- vba - 如何在多个系统中重复使用 Word 宏功能区?
- postgresql - Postgres如何通过夏令时将毫秒转换为日期
- java - Xamarin.Forms:Java.Lang.RuntimeException:无法从包裹中读取输入通道文件描述符
- javascript - 如何在 javascript 中将 python 类 str 转换为字典
- google-chrome - chrome declarativeNetRequest api - 规则集更新
- python - numpy中张量的矩阵向量乘法
- eclipse - Eclipse 在 ABAP 程序启动时显示登录屏幕
- laravel - 获取在 Laravel API 中执行的数据库语句列表