node.js中的文件上载错误

node.js中的文件上载错误,node.js,express,multer,Node.js,Express,Multer,要在node.js express中上载文件,我使用的是multer模块。代码本身在一个单独的文件中工作得很好。但是,如果我在我的项目中放置相同的代码(html代码在一个文件中,路由在另一个文件中),它将不起作用 Html代码: <form method="post" action="uploadgallerypic" enctype="multipart/form-data" > <input type="file" name="gallerypic" /> <i

要在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>
单击submit后,打印到console的第一条语句
console.log('newphoto 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);
var express=require('express');
var multer=需要('multer');
var-app=express();
var form=“”+
"" +
"" +
"";
app.use(multer({dest:'./uploads/'}));
app.get('/',函数(req,res){
res.writeHead(200,{'Content-Type':'text/html'});
目的(形式);
});
var fs=需要('fs');
app.post('/uploadgallerypic',函数(req,res){
console.log(“新增照片”);
控制台日志(请求文件);
fs.readFile(req.files.gallerypic.path,函数(err,数据){
如果(错误){
log(“从磁盘读取pic时出错”);
}
否则{
fs.writeFile('newpic.jpg',数据,'binary',函数(err){
如果(错误){
log(“将pic写入磁盘时出错”);
}
});
}
});
res.redirect('/profile');
});
app.listen(8080);
请告诉我这里缺少什么

编辑#1 我从routes.ejs中删除了
app.post('/uploadgallerypic',function(req,res)
block以查看错误“Cannot post/uploadgallerypic”,但我没有收到这样的错误,浏览器只是简单地旋转,并说没有收到数据。如果我从html代码中删除
enctype='multipart/form data'
语句,那么我就得到了确切的错误“无法发布/上传GalleryPic”。使用
enctype='multipart/form data'
时是否有任何问题


请帮帮我。

我想这可能是小的打字错误……在“坏”的例子中,至少有三件事是错误的/与你的“工作”例子不同的

1)
dest
值是否良好

在断开的示例中,更改此行:

app.use(multer({ dest: './uploads'}));
……为此:

app.use(multer({ dest: './uploads/'}));
fs.readFile(req.files.gallerypic.path, function(err, data) {
(请注意在
dest
路径上添加了尾随斜杠。可能不重要,但我没有去阅读
multer
源代码以了解它是否重要。我只知道在其他一些情况下它很重要,例如在使用grunt的某些情况下。)

2) 您的
app.post
将关闭:

更改此项:

app.post('/uploadgallerypic', function(err, res) {
…对这件事

app.post('/uploadgallerypic', function(req, res) {
(你在那里犯了
err
有什么原因吗?)

3) 并与#2有关

由此:

fs.readFile(req.files.gallerypic.path, function(req, data) {
……为此:

app.use(multer({ dest: './uploads/'}));
fs.readFile(req.files.gallerypic.path, function(err, data) {

(那么……您是复制了代码还是手工重写了代码,并意外地交换了哪个参数的位置?

不要直接将
multer
注入到express中。 这样

app.use(multer({ dest: './uploads/'}));
反而 1) 创建
multer的对象

var Upload = multer({
    storage: storage 
}).any('gallerypic');
2) 为gallerypic创建存储(上载文件)

3) 确定你的路线

 router.post('/uploadgallerypic', postData);
4) 在你的路线中调用multer

function postData(req,res){
 Upload(req, res, function (error) {
    if (error) {
        res.status(400).send(error);
    }
    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.post()的fs.readFile()中添加函数(err,data)。抱歉…使用#1建议也没有用…:(您是否尝试在多文件设置中使用来自单个文件解决方案(
'/home/gopi/git/manakutumbamu/manakutumbamu/public/images/'
)的相同(绝对)dest
路径(而不是
。/uploads'
)?是的,我做了。但是没有。你在第一个(有问题的)场景中提供html服务吗?将
操作更改为
/uploadgallerypic
而不是
uploadgallerypic
有效吗?我尝试了两者。uploadgallerypic和/uploadgallerypic都没有帮助…:(@Gopi在这个链接中找到答案,它肯定会对你有所帮助。