从FormData对象

时间:2019-06-21 10:13:04

标签: javascript node.js form-data

我正在使用html,javascript和nodejs开发一个Web应用程序。 我必须在服务器上存储一些pdf,所以我发现从客户端向服务器发送pdf的方式是使用FormData对象。 客户端我的代码是:

var files = new FormData();
var count = 0;
$('#tableSlideId tr').each(function() {

    var inputForm = $(this).find("th:first").children();
    file = inputForm[0].files[0];
    files.append((count++).toString(),file);
});


$.ajax({
    type: "POST",
    url: "/sendFiles",
    data: files,
    contentType: false,
    processData: false,

}).done(function(err){

    var text ="";
    if(err) {

        text = "Upload FAILED! Retry ...";

    } else {

        text = "Upload SUCCES!";

    }

    alert(text);



});

现在服务器端我需要访问存储在FormData对象中的每个文件,以便将它们存储在服务器的文件夹中。因此,我尝试使用以下代码:

 app.post('/sendFiles', function(req,res) {

    new formidable.IncomingForm().parse(req, (err, fields, files) => {
        if (err) {
          console.error('Error', err)
          throw err
        }

       // console.log('Files', files);
       daoQuery.insertPdf(files);
      })
    res.end();

});

其中daoQuery.insertPdf()函数定义为:

insertPdf: function(files){

    //var form = new FormData(files);
    //console.log(files);

  for(var key in files){

    //console.log("--->", files[key])

fs.writeFile(".\\dataset\\newFile.pdf", files[key].path, function(err) {
    if(err) {
        return console.log(err);
    }
    console.log("The file was saved!");
}); 

 }

}

通过这种方式,我在文件夹中获取了一个pdf文件,但它具有1KB的大小(不是原始文件的大小),如果我尝试打开它,系统会说该文件已损坏。 我非常确定FormData对象是从服务器正确接收的,实际上,在“ insertPdf”函数中,打印console.log('Files', files)给了我文件的所有字段(例如名称,大小,类型=应用程序/ pdf,路径等)。

1 个答案:

答案 0 :(得分:0)

我解决了如下修改insertPdf函数的问题:

insertPdf: function(files){

    //var form = new FormData(files);
    //console.log(files);

  for(var key in files){

    //console.log("--->", files[key])
    fs.readFile(files[key].path, function(err1,data){

    if(err1) throw err;

     fs.writeFile(".\\dataset\\newFile.pdf", data, function(err) {
        if(err) {
            return console.log(err);
        }
        console.log("The file was saved!");
    }); 


});