Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:将参数与上载文件一起发送_Javascript_Node.js_File Upload_Multer - Fatal编程技术网

Javascript:将参数与上载文件一起发送

Javascript:将参数与上载文件一起发送,javascript,node.js,file-upload,multer,Javascript,Node.js,File Upload,Multer,我的应用程序中的教练可以上传其个人资料、客户、程序和练习的图像 上传文件后,nodejs服务器将其重命名。然后nodejs服务器需要根据发送图像注册、编辑用户、添加客户端、编辑客户端等的表单,在数据库中插入/更新图像名称 因此,我想向nodejs函数发送额外的数据/参数 HTML: 更新: 我就是这样解决的: 一个函数从不同的表单获取图像—coach、客户端、程序、练习、生成唯一的文件名以及插入/更新数据库 不要重复;检查 不要两次访问服务器;检查 防止文件上传后重定向;检查 var stora

我的应用程序中的教练可以上传其个人资料、客户、程序和练习的图像

上传文件后,nodejs服务器将其重命名。然后nodejs服务器需要根据发送图像注册、编辑用户、添加客户端、编辑客户端等的表单,在数据库中插入/更新图像名称

因此,我想向nodejs函数发送额外的数据/参数

HTML:

更新: 我就是这样解决的:

一个函数从不同的表单获取图像—coach、客户端、程序、练习、生成唯一的文件名以及插入/更新数据库

不要重复;检查 不要两次访问服务器;检查 防止文件上传后重定向;检查

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;

 }

});