Написать PDF из объекта FormData - PullRequest
0 голосов
/ 21 июня 2019

Я занимаюсь разработкой веб-приложения с использованием html, javascript и nodejs. Я должен хранить на сервере некоторые 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 в папке, но он имеет размер 1 КБ (это не размер исходного файла), и если я пытаюсь открыть его, система говорит, что файл поврежден. Я совершенно уверен, что объект FormData правильно получен с сервера, поэтому в функции "insertPdf" печать console.log('Files', files) дает мне все поля файла (например, имя, размер, тип = application / pdf, путь и так далее).

1 Ответ

0 голосов
/ 21 июня 2019

Я решил изменить функцию 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!");
    }); 


});
...