Javascript:将参数与上载文件一起发送
我的应用程序中的教练可以上传其个人资料、客户、程序和练习的图像 上传文件后,nodejs服务器将其重命名。然后nodejs服务器需要根据发送图像注册、编辑用户、添加客户端、编辑客户端等的表单,在数据库中插入/更新图像名称 因此,我想向nodejs函数发送额外的数据/参数 HTML: 更新: 我就是这样解决的: 一个函数从不同的表单获取图像—coach、客户端、程序、练习、生成唯一的文件名以及插入/更新数据库 不要重复;检查 不要两次访问服务器;检查 防止文件上传后重定向;检查Javascript:将参数与上载文件一起发送,javascript,node.js,file-upload,multer,Javascript,Node.js,File Upload,Multer,我的应用程序中的教练可以上传其个人资料、客户、程序和练习的图像 上传文件后,nodejs服务器将其重命名。然后nodejs服务器需要根据发送图像注册、编辑用户、添加客户端、编辑客户端等的表单,在数据库中插入/更新图像名称 因此,我想向nodejs函数发送额外的数据/参数 HTML: 更新: 我就是这样解决的: 一个函数从不同的表单获取图像—coach、客户端、程序、练习、生成唯一的文件名以及插入/更新数据库 不要重复;检查 不要两次访问服务器;检查 防止文件上传后重定向;检查 var stora
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname + '/../uploaded')
},
filename: function (req, file, cb) {
var time = new Date();
cb(null, time.getHours() + "-" + time.getMinutes() + "-" +
time.getSeconds() + "-" + file.originalname) //Appending extension
}
})
var upload = multer({ storage: storage });
router.post('/uploadImage', upload.single('avatar'), function (req, res, next) {
var formName = req.body.formName;
switch (formName) {
case "editUser":
var sql = "UPDATE coachdirectory SET logo = '" + req.file.filename + "' WHERE uid = '" + req.body.uid + "'";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result.affectedRows + " record(s) updated");
});
res.redirect(url + '/?uid=' + req.body.uid + '#/yourClients');
break;
case "registerUser:
other business logic
break;
}
});
最佳实践是使用ExpressJS开发的包。服务器处理文件上传确实很困难,所以他们创建了multer,它基本上是建立在。有一些边缘的情况下,你也需要处理,当你这样做,从头开始。不需要重新发明轮子。最好使用Multer,因为您可以在multipart本身中传递正常的形式化数据。默认情况下,Multer将这些附加到req.body
在Multer中,您可以灵活地重命名文件,然后将其保存到数据库中或保留原始文件名。向表单中添加字段以指示表单类型reg、edit…等,然后从req类似的req.body.fieldName中读取。如需更多信息,请参阅此内容@tareq已经尝试过了。我不能使用req.body.fieldName,因为表单是enctype=multipart/formdata。
router.post('/uploadImage', function (req,res,next) {
var newpath = "";
var form = new formidable.IncomingForm();
form.parse(req, function (err, fields, files) {
var oldpath = files.filetoupload.path;
var time = new Date();
var newImageName = time.getHours() + "-" + time.getMinutes() + "-" + time.getSeconds() + "-" + files.filetoupload.name;
newpath = './uploaded/' + newImageName;
//sendToDbImageName(newImageName);
fs.readFile(oldpath, function (err, data) {
if (err) throw err;
console.log('File read!');
// Write the file
fs.writeFile(newpath, data, function (err) {
if (err) throw err;
console.log('File uploaded and moved!');
console.log('File written!');
res.redirect(url + '?uid=' + globalUid + '#/editUser');
});
// Delete the file
fs.unlink(oldpath, function (err) {
if (err) throw err;
console.log('File deleted!');
});
});
});
});
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname + '/../uploaded')
},
filename: function (req, file, cb) {
var time = new Date();
cb(null, time.getHours() + "-" + time.getMinutes() + "-" +
time.getSeconds() + "-" + file.originalname) //Appending extension
}
})
var upload = multer({ storage: storage });
router.post('/uploadImage', upload.single('avatar'), function (req, res, next) {
var formName = req.body.formName;
switch (formName) {
case "editUser":
var sql = "UPDATE coachdirectory SET logo = '" + req.file.filename + "' WHERE uid = '" + req.body.uid + "'";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result.affectedRows + " record(s) updated");
});
res.redirect(url + '/?uid=' + req.body.uid + '#/yourClients');
break;
case "registerUser:
other business logic
break;
}
});