Я занимаюсь разработкой веб-приложения с использованием 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, путь и так далее).