2017-07-18 34 views
0

我有一个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> 

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

简化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,它不适合Parse.File工作在req.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.File无法创建一个解析。来自req.file的文件。

任何帮助非常感谢!

谢谢先进!

回答

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值。

0

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

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

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