要在 node.js express 中上传文件,我正在使用 multer 模块。单独文件中的代码本身就像魅力一样工作。但是如果我在我的项目中放置相同的代码(一个文件中的 html 代码和另一个文件中的路由)它不起作用。
html代码:
<form method="post" action="uploadgallerypic" enctype="multipart/form-data" >
<input type="file" name="gallerypic" />
<input type="submit" value="upload" />
</form>
对应的routes.js代码
app.use(multer({ dest: './uploads'}));
app.post('/uploadgallerypic', function(req, res) {
console.log("New photo added");
console.log(req.files);
fs.readFile(req.files.gallerypic.path, function(err, data) {
if(err) {
console.log("Error in reading pic from disk");
}
else {
fs.writeFile('newpic.jpg', data, 'binary', function(err) {
console.log("Error in writing pic to disk");
});
}
});
});
单击提交后 console.log('New photo added')
,打印到控制台的第一条语句未执行。浏览器只是旋转,最后说“未收到数据”。但是如果我用这两个块创建一个文件,那么它工作正常。
var express = require('express');
var multer = require('multer');
var app = express();
var form = "<form method=\"post\" action=\"uploadgallerypic\" enctype=\"multipart/form-data\" >" +
"<input type=\"file\" name=\"gallerypic\" />" +
"<input type=\"submit\" value=\"upload\" />" +
"</form>";
app.use(multer({dest:'./uploads/'}));
app.get('/', function (req, res){
res.writeHead(200, {'Content-Type': 'text/html' });
res.end(form);
});
var fs = require('fs');
app.post('/uploadgallerypic', function(req, res) {
console.log("New photo added");
console.log(req.files);
fs.readFile(req.files.gallerypic.path, function(err, data) {
if(err) {
console.log("Error in reading pic from disk");
}
else {
fs.writeFile('newpic.jpg', data, 'binary', function(err) {
if(err) {
console.log("Error in writing pic to disk");
}
});
}
});
res.redirect('/profile');
});
app.listen(8080);
请告诉我我在这里缺少什么。
编辑#1 我app.post('/uploadgallerypic', function(req, res)
从 routes.ejs 中删除了块以查看错误“无法 POST /uploadgallerypic”,但我没有收到此类错误,浏览器只是旋转并说没有收到数据。如果我enctype='multipart/form-data'
从 html 代码中删除声明,那么我会收到确切的错误“无法发布 /uploadgallerypic”。使用有没有问题enctype='multipart/form-data'
。
请帮我。