解析:将上传的文件/图像发布到后端

时间:2017-07-18 07:20:40

标签: javascript node.js express

我有一个HTML:

form.html:

<form method="post" enctype="multipart/form-data" action="/"> 
    <input type="file" name="pic" id="imgupload">
</form> 

<script>
document.getElementById("imgupload").onclick = function({myFunction()};

function myFunction() {
   var fileUploadControl = $("#imgupload")[0];
   if (fileUploadControl.files.length > 0) {
      var file = fileUploadControl.files[0];
      var name = "photo.jpg";

      //how to pass this (parseFile) to server.js? 
      var parseFile = new Parse.File(name, file);
   }
}
</script>

和我的后端服务器代码使用express:

简化的server.js(仅限服务器路由):

 app.get('/', (req, res) => {
    //loads the form.html from above. 
    res.sendFile(__dirname + "/form.html"); 
 })

 app.post('/', (req, res)=>{
      //once press submit button, will post parseFile to here
      //from here, i will save the parseFile to database. 
      res.status(204).end(); 
 })

我的目标是上传图片,然后当用户按下提交时,parseFile变量将被发送到server.js中的app.post(),在那里进行保存。

我已经尝试过multer,它对req.file中的Parse.File不起作用,即:

 app.post('/', upload, (req,res)=>{
     //req.file contains the file information
     var file = new Parse.File(name, req.file);

     //save to database via Parse
     file.save(); //example code. 
     res.status(200).success("test code")
 })

此代码在Parse中返回TypeError,其中Parse.File无法从req.file创建Parse.File。

非常感谢任何帮助!

先谢谢你!

2 个答案:

答案 0 :(得分:0)

req.file不是Parse期望的文件格式的数据(而是它的Multer格式的对象) - 所以Parse.File被不恰当地调用。请参阅此处的Parse SDK:http://parseplatform.org/Parse-SDK-JS/api/classes/Parse.File.html这解释了可以为每个函数参数插入的数据类型。

req.file.buffer理论上应该有效(假设你每次从Multer获得一个文件)。由于您没有限制multer以这种方式工作,您的代码可能也应该处理一组文件。

您还需要为文件名创建一个字符串(名称似乎不是代码中的声明变量)。

答案 1 :(得分:0)

让这个工作。

似乎我必须以base64格式对图片进行编码,并将base64值分配给要传递给post方法的HTML元素。

类似的东西:

<body>
<input id="inp" type='file' accept=".jpg">
<br>
<img id="img" height="150">
</body>

<input type="hidden" id="base64" name="base64" value=""> 
<br>
<br>
<input type="submit" id = "submit">
</form>


<script type="text/javascript">
    function readFile() {
      if (this.files && this.files[0]) {
      var FR= new FileReader();
      FR.addEventListener("load", function(e) {
      document.getElementById("img").src       = e.target.result;
      //get the base64 encoded string and add it to id=b64. 
      document.getElementById("base64").value = e.target.result;
    }); 

    FR.readAsDataURL( this.files[0] );
  }
}

document.getElementById("inp").addEventListener("change", readFile);

最终我将文件转换为base64并将base64值插入名为base64的元素id中。

然后通过在post方法中调用req.body.base64来访问base64值。