我刚开始学习NodeJS而且我遇到了问题。我想将文件上传到我的服务器。为此,我搜索并找到了这个模块multer。在GitHub上作为示例工作:
var express = require('express');
var multer = require('multer');
var upload = multer({ dest: 'uploads/' });
var app = express()
app.post('/uploadImage', upload.single('image'), function(req, res) {
console.log(req.file);
});
将带有FormData的图像发布到/uploadImage
时,图像将保存在uploads/
目录中。问题是图像以奇怪的名称保存,我想用原始名称保存它。
为此,我了解到我必须致电app.use(multer({ dest: 'uploads/' }))'
然后我可以在我的功能中访问req.file
,如:
app.post('/uploadImage', function(req, res) {
console.log(req.file);
});
但是我在尝试app.use()时遇到错误:
TypeError: app.use() requires middleware functions
at EventEmitter.use (project\node_modules\express\lib\application
.js:209:11)
我正在使用NodeJS 0.12.7和Express 4.13.1
如何实现上传?谢谢。
答案 0 :(得分:54)
您需要以下列形式之一使用var $curr = $('.toggle').first();
// Hide all the divs
$('.toggle').addClass('hide');
// Display the first div
$curr.removeClass('hide');
var interval = setInterval(function () {
// Hide all the divs
$('.toggle').addClass('hide');
var len = $('.toggle').length,
found = false;
$(".toggle").each(function(index) {
// If the curr element is the
// element in iteration
// select the next indexed element..
if($(this).is($curr) && !found) {
var nextIndex = index + 1;
if(nextIndex >= len) {
$curr = $('.toggle').first();
} else {
$curr = $('.toggle').eq(nextIndex);
found = true;
}
}
});
$curr.removeClass('hide');
}, 500);
:
app.use(multer({dest:'./uploads/'}))
即:
app.use(multer({dest:'./uploads/'}).single(...));
app.use(multer({dest:'./uploads/'}).array(...));
app.use(multer({dest:'./uploads/'}).fields(...));
确保有类似的东西:
app.use(multer({dest:'./uploads/'}).single('photo'));
在你的HTML中。
答案 1 :(得分:17)
var app = require('express');
var multer = require('multer');
app=express();
app.use(multer({dest:__dirname+'/file/uploads/'}).any());
app.post('/upload',function(req,res){
console.log(req.files);
res.redirect('/');
});
答案 2 :(得分:8)
来自@ 127.0.0.1的答案是正确的,但如果你使用 Express Router ,代码会有所改变:
var express = require('express');
var multer = require('multer');
var router = express.Router();
var uploads = multer({
dest: 'public/uploads/'
});
router.post('/upload', uploads.single('avatar'), function(req, res, next) {
console.log(req.file);
//...
});
重要的一点,表单编码应该是enctype="multipart/form-data"
,如上所述:
<form action="/upload" enctype="multipart/form-data" method="post">
<input type="file" name="avatar">
<input type="submit" value="Go avatar go!">
</form>
答案 3 :(得分:6)
自版本1.0.0
var upload = multer({ dest: 'tmp/' });
app.post('/file_upload', upload.single('photo'), function (req, res) {
答案 4 :(得分:4)
您无法使用multer更改文件名,但您可以使用Node.js流和fs模块将已上传文件的内容复制到同一文件夹中的新文件(设置为原始文件名)并删除旧文件之一。
首先在节点脚本中导入fs,path和multer。
src
现在,使用multer设置任何类型文件的目标目录,如下所示。
var express = require('express');
var multer = require('multer');
var fs = require('fs');
var pathModule = require('path');
现在使用stream和fs来解决您的问题。
var app = express();
app.use(multer({dest:__dirname+'/resoucres/'}).any());
答案 5 :(得分:3)
更改为app.use(multer({dest:&#39; ./ uploads /&#39;})。single(&#39; photo&#39;));在app.js中,我可以启动服务器
答案 6 :(得分:1)
我遇到了同样的问题。我解决了它。 对于第一个问题,如何获取原始文件名? 我打印了整个请求,发现我们可以通过使用路径获得原始名称 &#34; req.file.originalname&#34;
和另一个问题,如何使用&#34; app.use()&#34;? 是指:here