我想将文件从客户端上传到服务器,然后将它们存储在与上传该特定文件的用户对应的文件夹中!代码似乎没问题,但问题似乎与fs有关! Fs只传输15个字节的文件。实际上它只传输了我迄今为止尝试的每种文件类型的15个字节(图像和视频)!这是我的代码到目前为止,你能帮我吗?谢谢!
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.post('/upload', multipartMiddleware, function(req, res){
var file = req.files.thumbnail; // that's what I've named the html input element
var stream = fs.createWriteStream(file.path);
fs.writeFile('./users/'+req.user._id+'/'+file.originalFilename, stream);
res.redirect('/');
});
答案 0 :(得分:1)
问题在于以下几点:
var stream = fs.createWriteStream(file.path);
fs.writeFile('./users/'+req.user._id+'/'+file.originalFilename, stream);
stream,不是' file.path'的文件内容。相反,它是一个流,您可以通过该流写入' file.path'。
例如:
var stream = fs.createWriteStream(file.path);
stream.write('some content');
stream.end();
当您使用它来使用fs.writeFile写入文件时,它的对象表示就是所写的内容,即“对象,对象”' (15个月)。
你应该做的是从另一个文件读取,并将内容保存在字符串或缓冲区中,而不是在流中:
var stream = fs.readFileSync(file.path);
然后写入目标文件。当然,如果您使用的是文件写入的异步模型,请记住仅在完成时重定向。顺便说一下,有一个writeFileSync()API,您也可以通过它同步写入。
希望这有帮助。
答案 1 :(得分:0)
试试这样:
app.post('/upload', multipartMiddleware, function(req, res){
var file = req.files.thumbnail; // that's what I've named the html input element
fs.writeFile('./users/'+req.user._id+'/'+file.originalFilename, file, function(err) {
if(err) {
res.redirect('error_page');
return console.log(err);
}
console.log("The file was saved!");
res.redirect('/');
});
});