我刚开始学习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);
});
Run Code Online (Sandbox Code Playgroud)
将带有FormData /uploadImage的图像发布到图像时会保存在uploads/目录中.问题是图像以奇怪的名称保存,我想用原始名称保存它.为此,我明白我必须打电话app.use(multer({ dest: 'uploads/' }))' ,然后我将能够访问req.file我的功能,如:
app.post('/uploadImage', function(req, res) {
console.log(req.file);
});
Run Code Online (Sandbox Code Playgroud)
但是我在尝试app.use()时遇到错误:
TypeError: app.use() requires middleware functions
at EventEmitter.use (project\node_modules\express\lib\application
.js:209:11)
Run Code Online (Sandbox Code Playgroud)
我使用NodeJS 0.12.7和Express 4.13.1
我怎样才能实现上传?谢谢.
Rub*_*ero 55
您需要以app.use(multer({dest:'./uploads/'}))下列形式之一使用:
app.use(multer({dest:'./uploads/'}).single(...));
app.use(multer({dest:'./uploads/'}).array(...));
app.use(multer({dest:'./uploads/'}).fields(...));
Run Code Online (Sandbox Code Playgroud)
即:
app.use(multer({dest:'./uploads/'}).single('photo'));
Run Code Online (Sandbox Code Playgroud)
并确保有类似的东西:
<form action="/postPhotos" enctype="multipart/form-data" method="post">
<input type="file" name="photo">
<input type="submit" value="Upload photo">
</form>
Run Code Online (Sandbox Code Playgroud)
在你的HTML中.
小智 18
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('/');
});
Run Code Online (Sandbox Code Playgroud)
来自@ 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);
//...
});
Run Code Online (Sandbox Code Playgroud)
而重要的一点,表格编码应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>
Run Code Online (Sandbox Code Playgroud)
自版本1.0.0
var upload = multer({ dest: 'tmp/' });
app.post('/file_upload', upload.single('photo'), function (req, res) {
Run Code Online (Sandbox Code Playgroud)
您无法使用multer更改文件名,但可以使用Node.js流和fs模块将已上传文件的内容复制到同一文件夹中的新文件(设置为原始文件名)中,并删除旧文件。
首先,在节点脚本中导入fs,path和multer。
var express = require('express');
var multer = require('multer');
var fs = require('fs');
var pathModule = require('path');
Run Code Online (Sandbox Code Playgroud)
现在,如下所示使用multer设置任何类型的文件的目标目录。
var app = express();
app.use(multer({dest:__dirname+'/resoucres/'}).any());
Run Code Online (Sandbox Code Playgroud)
现在,使用stream和fs解决您的问题。
app.post('/uploadImage', function(request, response) {
var readerStream = fs.createReadStream(request.files[0].path);
var dest_file = pathModule.join(request.files[0].destination, request.files[0].originalname);
var writerStream = fs.createWriteStream(dest_file);
var stream = readerStream.pipe(writerStream);
stream.on('finish', function(){
fs.unlink(request.files[0].path);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42768 次 |
| 最近记录: |