我使用以下代码允许人们将图像上传到服务器:
app.post("/api/upload", function (req, res) {
fs.readFile(req.files[0].path, function (err, data) {
console.log('The data for the file..', data);
if (err) {
res.send(err).end();
} else {
// ...
var newPath = __dirname + "/uploads/" + req.headers["account_id"] + '_' + moment().format('MM_DD_YYYY_HH-mm-ss') + '_' + req.files[0].originalname;
fs.writeFile(newPath, data, function (err) {
console.log('File Written');
if (err) {
res.send(err).end();
} else {
res.send({
success: true,
file: newPath,
files: req.files
}).end();
}
//res.end({"success": true})
});
}
});
});
问题是,对于上传的每个文件,我还得到了一个 arrayBuffer 版本(我认为),请参见图片:
我怎样才能防止这种情况发生,最重要的是,为什么会发生这种情况? 谢谢!
最佳答案
工作的时候,我得到了一个使用 multer 模块的解决方案。使用这个模块,您可以上传文件和图像。并且它成功上传到目标文件夹。
这是我的服务器代码app.js
var express =r equire('express');
var multer = require('multer');
var path = require('path')
var app = express();
var ejs = require('ejs')
app.set('view engine', 'ejs')
var storage = multer.diskStorage({
destination: function(req, file, callback) {
callback(null, './public/uploads')//here you can place your destination path
},
filename: function(req, file, callback) {
callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
}
})
app.get('/api/file',function(req,res){
res.render('index');
});
app.post('/api/file', function(req, res) {
var upload = multer({
storage: storage}).single('userFile');
upload(req, res, function(err) {
console.log("File uploaded");
res.end('File is uploaded')
})
})
app.listen(3000,function(){
console.log("working on port 3000");
});
创建一个 views
文件夹并将此 index.ejs
文件放入其中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form id="uploadForm" enctype="multipart/form-data" method="post">
<input type="file" name="userFile" />
<input type="submit" value="Upload File" name="submit">
</form>
</body>
</html>
之后,将服务器作为 node app.js
运行。运行此网址后,打开浏览器并输入 http://localhost:3000/api/file
选择一个您要上传到目标文件夹的文件。并在终端和浏览器中均获得成功响应。希望这对您有所帮助。
关于javascript - Node fs (文件流) 上传单个文件时创建 2 个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45748529/