req.files在node.js - express中无法工作

3

嗨,我正在尝试接受上传的文件,但每次调用req.files时都会被视为未定义...不确定我做错了什么...

这是我的app.js文件:

var express = require('express')
    , user = require('./routes/user')
    , http = require('http')
    , path = require('path')
    , mongoose = require('mongoose')
    , mongoConnect = mongoose.connect('mongodb://localhost/clothing')
    , app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser({uploadDir: './public/img'}));
app.use(express.multipart());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

app.get('/user', user.user);
app.post('/user', user.userPost);

然后在我的路由文件中,我只是调用了:
req.files

在客户端上,我正在调用:

form(action="/user", method="post")
        label name:
            input(type="text", name="name")
        label pic:
            input(type="file", name="picture", enctype="multipart/form-data")
        input(type="submit", value="Add New Clothes Item")
3个回答

10

你需要在表单中添加enctype="multipart/form-data"


我想从应用程序而不是网页上上传...那么如何设置这个选项呢? - user2649058
@Remarkable 这完全取决于你的应用程序。如果你需要帮助,应该提出一个新问题。 - Jani Hartikainen

2
除了 @Jani 所说的,你的应用程序还有一个错误:
app.use(express.bodyParser({uploadDir: './public/img'}));
app.use(express.multipart());

这基本上意味着:
app.use(express.json());
app.use(express.urlencoded());
app.use(express.multipart({uploadDir: './public/img'}));
app.use(express.multipart());

所以不需要最后一个多部分中间件。
文档:

http://expressjs.com/api.html#bodyParser


1

不要使用 express.bodyParser(),考虑使用此处提到的替代方案:https://github.com/senchalabs/connect/wiki/Connect-3.0

在我的情况下,由于 Connect 将删除多部分中间件兼容性,每次启动节点服务器时都会出现警告。

connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0

我已经测试了connect-multiparty,req.files被成功初始化了。https://github.com/andrewrk/connect-multiparty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接