javascript - 如何使用 Node.js 将文件路径保存到我的数据库?
问题描述
我有一个简单的 HTML 表单,可让用户上传文件。这比提交时使用 auth/post/ 发布。
我的路线如下所示:
const express = require('express');
const authController = require('../controllers/auth');
const router = express.Router();
const multer = require('multer');
function checkFileType(file, cb){
const filetypes = /jpeg|jpg|png|gif|mp3|ogg|aac|wav/;
if (req.fileValidationError) {
return res.send(fileValidationError);
}
const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
const mimetype = filetypes.test(file.mimetype);
if(mimetype && extname){
return cb(null,true);
} else {
cb('Format not allowed!');
}
}
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null,'./user_uploads/')
},
fileFilter: function(req, file, cb){
checkFileType(file, cb);
},
filename: function (req, file, cb) {
let ext = file.originalname.substring(file.originalname.lastIndexOf('.'), file.originalname.length);
cb(null, Date.now() + ext)
}
});
const upload = multer({
storage: storage
}).single('user_file');
router.post('/post', upload, function(req, res, next){ res.locals.storage = storage; next();}, authController.post);
module.exports = router;
当您使用“上传”时,它会检查您是否实际放入了某些内容、格式是否正确、更改文件名并将其保存到临时文件夹中。
我现在想获取存储变量,也就是我的 authController.post 的文件路径/名称/扩展名。
它是一个带有导出的控制器,其他所有内容都保存到数据库中。我将如何将路径变量传递给它?
作为参考,它看起来像这样(我需要将路径放入 user_path:_______):
exports.post = (req, res, next) => {
let { name, title, cat, con, user_file } = req.body;
const time = new Date().toJSON().slice(0, 19).replace('T', ' ');
let cat_id = 0;
if(req.files) user_file.fileName = req.file.filename;
db.query("SELECT id FROM cat WHERE cat_name = ?", [cat], async function(err, results) {
if (!err)
cat_id = results[0].id;
else
console.log(err);
const ID = await promisify(jwt.verify)(req.cookies.scrooc, process.env.jwtsecret);
const id = ID.id;
db.query('INSERT INTO posts SET ?', {user_id: id, cat_id: cat_id, time: time, title: title, content: con, user_file: res.locals.storage, reply: 0 }, (error, results) => {
if(error)
console.log(error);
else
res.status(200).redirect('/post');
});
});
};
解决方案
我认为您应该尝试编写一个文本字段(Python 中的 QLineEdit),将文件名路径设置为文本字段,然后在将值插入数据库期间使用插入语句将文本字段的内容保存到数据库中。例如,使用 Python,您可以通过以下方式实现:getfile 是我的函数的名称,您可以为您的函数命名,但记得调用它。photoinfo 是我的 QLineEdit 的名称,在 Java 中,如果我还记得的话,它被称为 JTextField。所以尝试使用我的代码中的逻辑,看看它是否可以解决你的问题。
''' def getfile(self):
self.file_name = QtWidgets.QFileDialog.getOpenFileName(None, "Open", "", "All Files (*);;JPG Files(*.jpg)")
try:
if self.file_name[0] != '':
print("success")
self.photoInfo.setText(self.file_name[0])
else:
print("error")
except Exception as e:
print(e)
推荐阅读
- java - 将 2 个 32 位整数交织成 64 个整数
- sql - 插入特定用户行的 SQL Server 触发器
- docker - 从 IBM 云上的 Docker 映像部署 Web 应用程序
- github - Github GraphQL 错误:必须指定查询属性并且必须是字符串
- c# - 绑定延迟一步
- c++ - 在 C++ 中打印出返回地址值的二维数组的函数
- ruby-on-rails - JSON 参数在 Specs 中作为空字符串而不是 nil 发送
- excel - @运算符在Excel中的公式前面
- unix - 致命错误:CALL_AND_RETRY_LAST 分配失败 - 节点应用程序的 JavaScript 堆内存不足错误
- python-3.x - 在 Class 之外使用 Def 在短时间内影响 Class