CNode

请问在 Express 4.0 里如何实现上传?

Yyouqingkui发布于12 年前最后回复11 年前15 回复19788 浏览0 收藏

是要在 app.js 里添加:

app.use(bodyParser({ keepExtensions: true, uploadDir: './public/images' }));  ?

我表单的 file 的名字为 file1,在接收请求里这样子写

router.post('/', function(req, res){
    console.log(req.files.file1);
});

会报:

TypeError: Cannot read property 'file1' of undefined

请问如何实现个简单上传?谢谢!

查看回复

回复 (15)

Y
youxiachai#1·12 年前
引用 youxiachai4.0 的 bodyparser 不处理文件了啊... 要处理文件得用 https://github.com/andrewrk/connect multiparty

@youqingkui 你用了connect-mutilparty 就完全没必要这么写了..........

我给那个文档.是让你看看,配置参数.怎么配..

L
lln7777#2·12 年前

formidable +1 https://www.npmjs.org/package/formidable coffeescript 示例:

  form = new formidable.IncomingForm()
  form.parse req, (err, fields, files)->
      console.log files
      console.log fields
S
sxlzll#4·11 年前

multipartybusboy 不知道区别是什么,我选的前者,npm下载量是后者的10倍

D
DavidCai1993#5·11 年前

multer吧 express官方推荐 自豪地采用 CNodeJS ionic

S
shen2#6·12 年前

使用multer中间件 app.use(require('multer')({dest:__dirname + '/uploads'}));

Y
youxiachai#7·12 年前

4.0 的 bodyparser 不处理文件了啊...

要处理文件得用

https://github.com/andrewrk/connect-multiparty

Y
youqingkui#8·12 年前
引用 shen2使用multer中间件 app.use(require('multer')({dest: dirname + '/uploads'}));

我這樣子app.use(connect.multipart({ uploadDir: './public/' }));已經能夠上傳,但是如何在它沒有保存到文件夾的時候處理它呢?比如重命名?謝謝!

Y
youqingkui#9·12 年前
引用 youxiachai4.0 的 bodyparser 不处理文件了啊... 要处理文件得用 https://github.com/andrewrk/connect multiparty

謝謝!已經可以了,但是我怎麼在文件保存到目的地的時候先處理它呢?

Y
youqingkui#11·12 年前
引用 youxiachai4.0 的 bodyparser 不处理文件了啊... 要处理文件得用 https://github.com/andrewrk/connect multiparty

@youxiachai 恩,謝謝。就是文檔是英文的,到時還要請教下。

Y
youqingkui#12·12 年前
引用 youxiachai4.0 的 bodyparser 不处理文件了啊... 要处理文件得用 https://github.com/andrewrk/connect multiparty

@youxiachai 我遇到个错误,我代码是这样子的: router.post('/', function(req, res){ var form = new multiparty.Form();
req.form.on('part', function(part){ // transfer to s3 etc console.log('upload %s %s', part.name, part.filename); var out = fs.createWriteStream('/tmp/' + part.filename); part.pipe(out); });

req.form.on('close', function(){ res.end('uploaded!'); }); }); 我已经安装了组建并var multiparty = require('multiparty');但是总是报这个错误:Cannot call method 'on' of undefined

S
SunnyKale#13·12 年前

formidable

W
wh1100717#15·12 年前

connect-multiparty 的作者已经不推荐使用这个中间件了。其不会在上传后将之前生成的临时文件清除。

最好使用 formidable 或者busboy。

下面是简单的busboy使用示例

busboy = require 'connect-busboy'
...
app.use busboy()
...
app.post '/upload', (req,res)->
	req.pipe req.busboy
	req.busboy.on 'file', (fieldname, file, filename) ->
		...
参与回复
登录后即可参与回复。登录