我正在使用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,路径等)。
答案 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!");
});
});