使用Express上传文件(node.js)
我试图做一个非常简单的file upload服务器node.js和expression4.0.0。 根据http://howtonode.org/really-simple-file-uploads我想我应该得到“req.files”,但它不存在(是未定义的)。
var express = require('express') var fs = require('fs') var app = express() app.get('/', sendForm) app.post('/upload', uploadFile) app.listen(8000) function sendForm(req, res) { // a form with a <input type="file"> res.send('<!doctype html><html><head></head><body><form action=\"/upload\" method=\"post\" enctype=\"multipart/form-data\"><input type=\"file\" name=\"displayImage\"><button type=\"submit\">submit</button></form></body></html>') } function uploadFile(req, res) { console.log(req.files) // prints undefined res.redirect('back') }
有些网站build议添加“app.use(bodyParser)”,并通过“app.configure()”来调用。 据我所知,“app.configure”已经从express 4.0.0中删除。
为什么不req.files存在?
我发现Formidabble易于使用,这是你将如何使用它:
var formidable = require('formidable'); var fs = require('fs'); module.exports.upload = function (req, res, next) { var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { if ('file' in files) { var file = files['file']; // Do something with file module.exports._deleteFiles(files); res.send(200); } else { module.exports._deleteFiles(files); res.send(400); } }); }; module.exports._deleteFiles = function (files) { // Delete temporary files for (var f in files) { fs.unlink(files[f].path); } };
最近大部分中间件都是从Express里面取出来的 。
你需要包含中间件来填充req.files
– 像connect-multiparty 。
包括var multiparty = require('connect-multiparty');
与您的模块导入,并且在您有一个app
,添加与app.use(multiparty());
中间件app.use(multiparty());
。
确保清理临时文件,并且可能仅将多方作为中间件传递给明确将要上载的路由。
- 使NodeJSfunction同步? 在查询数据库之前发送json响应
- 优化Node.js内存消耗
- 我不明白为什么我的nodejs / JavaScript的正则expression式不工作
- YouTube的正则expression式:经testing挑选video和播放列表ID,但Node.js不会
- ElasticSearch Nodejs Express自动化testing
- 为什么这行会导致Javascript崩溃?
- fs.writefile只能在节点js的最后一个函数中执行
- 在Express-Validator中validation
- 将function传递给下一个function,根据条件进行激活。 的NodeJS