如何在nodejs中创建一个以用户名命名的目录
How to create a directory that take the name of username in nodejs
我正在使用 nodeJS (express) 进行上传任务,目标是上传一个包含一些 mp4 文件的 zip 文件,我想将 zip 内容提取到一个以用户名命名的目录中 (req.user ) 如果不存在,或者如果存在,我不需要重新创建它,只需将 zip 内容放入其中即可。
可以从技术上解释一下如何做吗,我完成了上传和提取过程,但需要深入了解如何完成这项任务,我的应用程序连接了数千名用户。
upload.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
}
我正在使用 nodeJS (express) 进行上传任务,目标是上传一个包含一些 mp4 文件的 zip 文件,我想将 zip 内容提取到一个以用户名命名的目录中 (req.user ) 如果不存在,或者如果存在,我不需要重新创建它,只需将 zip 内容放入其中即可。
可以从技术上解释一下如何做吗,我完成了上传和提取过程,但需要深入了解如何完成这项任务,我的应用程序连接了数千名用户。
upload.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
}