无法以BLOB将Multer表单数据(zip文件)发送到MySql数据库

时间:2019-08-22 13:05:10

标签: mysql node.js blob fs multer

我正在尝试将.zip文件以及两个文本字段一起上传,以描述上传的文件到我的Node.js服务器,然后到附加的MySql数据库表。

我有两条POST路由,一条通过表单,另一条在JavaScript中,用于将表单数据发送给异步函数,以将req.file和req.body对象分解为变量,然后通过查询字符串发送至数据库。

已压缩的文件按照Multer位置定义的说明保存到上载目录,因此可以正常工作。

该文件未发送到异步功能,因此我认为AJAX发布请求有问题。

我已经研究了大约一个星期,我不认为我需要将表单数据转换为BLOB格式以发送到数据库,因为默认情况下它应该接受zip文件作为BLOB输入。

我只尝试过使用POST路由的形式(例如action =“ / upload” method =“ POST”)。这确实将表单数据(文件和文本输入)发送到异步函数,但没有将其发送到数据库。

我是否需要两个发帖请求?他们在互相打扰吗?

我真的很固执,非常感谢您的帮助。

这是upload.html中的上传表单和AJAX发布路线:

$(document).ready(function() {
  $("#upload").click(function() {
    $("#form-upload").toggle();
  })
  $('#form-submit').submit(function(e){
     e.preventDefault();

     var vilename = $('#vilename').val(); 
     var viledesc = $('#viledesc').val(); 

     $(this).ajaxSubmit({
       data: {vile_name: vilename, vile_desc: viledesc}, 
       contentType: 'multipart/form-data',
       success: function(response){
         console.log('File uploaded and form submitted');     
       }
   });
     return false;
});

});

</script>
</head>
<body>
    <div id="msgs">
    </div>

    <button type="button" id="upload" value="Upload">Upload</button>

    <form id="form-upload" action="/upload"  method="POST"  enctype="multipart/form-data" style="display:none">
        Upload folder: <input type="file" id="uservile" name="userVile">
        VR name: <input type="text" id="vilename" name="vileName">
        VR description: <input type="text" id="viledesc" name="vileDesc">
        <input type="submit" id="form-submit">
    </form>
</body>

这是lib / main.js中的Async函数:

  const upload = async (req, res) => { 
    try {
      const {user_vile} = req.file;an
      const {user_id} = req.session.key;
      const {vile_name, vile_desc} = req.body;
      const resp = await db.upload(user_id, user_vile, vile_name, vile_desc); 
      req.session.key = resp;
      res.send({error: false, message: "Vile added"});
    } catch (e) {
      res.send({error: true, message: "Vile upload failed"})
      console.log(e);
    }
};

这是API.js中的ROUTE帖子:

router.post('/upload', upload.single('userVile'), main.upload);

这是db.js中的MySql查询字符串:

const upload = async (user_id, user_vile, vile_name, vile_desc) => {
  const results = await testDb.query(`INSERT into user_v_file (user_id,user_vile,vile_name,vile_desc) VALUES '${user_id}', '${user_vile}', '${vile_name}', '${vile_desc}'`);
  return results
};

当我仅使用表单中的post route时,该错误表明我的Sql查询语法有问题。

当我同时使用两个发布路线时,错误显示为“ TypeError:无法分解'undefined'或'null'的属性user_vile。”在异步功能上。

0 个答案:

没有答案