【问题标题】:About using Multer(1.0.6) and Express to upload files关于使用 Multer(1.0.6) 和 Express 上传文件
【发布时间】:2016-01-16 03:55:12
【问题描述】:

我想使用 multer 从表单中快速上传图片。

我找到了post,关于如何使用 multer 上传文件,并触发事件重命名文件。但是,我发现它只适用于旧版本(multer-0.1.6)

在multer的github的最新指令中,我想我必须使用disk storage engine来上传新名称的文件,但是它不起作用。请给我一些指导,我整天都在尝试这个功能......

此外,我不确定为什么需要res.status(204).end();?我不加这行,点击上传按钮时网页会一直锁定...

package.json

{
  "name": "FileUpload",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.13.2",
    "cookie-parser": "~1.3.5",
    "debug": "~2.2.0",
    "express": "~4.13.1",
    "jade": "~1.11.0",
    "morgan": "~1.6.1",
    "multer": "^1.0.6",
    "serve-favicon": "~2.3.0"
  }
}

upload.js

var express = require('express');
var multer  = require('multer');
var upload = multer({ storage: storage });

var app = express();

app.post('/uploadImage', upload.single('image'), function (req, res, next) {
    console.log("success");
    console.log(req.file);
    res.status(204).end();
});

app.get('/',function(req,res){
    console.log("It's work");
    res.sendFile(__dirname + "/index.html");
});

var storage = multer.diskStorage({
   destination: function (req, file, cb) {
     console.log("Dest");
     cb(null, 'uploads/')
   },
   filename: function (req, file, cb) {
     cb(null, file.fieldname + '-' + Date.now())
   }
});

app.listen(3000,function(){
    console.log("Working on port 3000");
});

index.html

<form id        =  "uploadForm"
     enctype   =  "multipart/form-data"
     action    =  "/uploadImage"
     method    =  "post"
>
<input type="file" name="image" />
<input type="submit" value="Upload Image" name="submit">
</form>

解决方案 我的代码无法运行的原因是代码的顺序...... 下面的顺序是对的。

var express = require('express');
var multer  = require('multer');

var app = express();

app.get('/',function(req,res){
    console.log("It's work");
    res.sendFile(__dirname + "/index.html");
});

var storage = multer.diskStorage({
   destination: function (req, file, cb) {
     console.log("Dest");
     cb(null, 'uploads/')
   },
   filename: function (req, file, cb) {
     cb(null, file.fieldname + '-' + Date.now())
   }
});

var upload = multer({ storage: storage });

app.post('/uploadImage', upload.single('image'), function (req, res, next) {
    console.log("success");
    console.log(req.file);
    res.status(204).end();
});

app.listen(3000,function(){
    console.log("Working on port 3000");
});

【问题讨论】:

  • 如何返回错误或成功信息?

标签: node.js express multer


【解决方案1】:

在 GitHub 中,您可以找到这个示例,对我来说它正在工作:

var express = require('express');
var multer  = require('multer');
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
  }
})

var upload = multer({ storage: storage })

var app = express();

app.post('/uploadImage', upload.single('image'), function (req, res, next) {
    console.log("success");
    console.log(req.file);
    res.status(204).end();
});

【讨论】:

  • @HardikMandankaa 使用回调
  • @HardikMandankaa app.post() 方法中有回调,你可以得到错误或成功信息
猜你喜欢
  • 2016-10-22
  • 2017-03-01
  • 2015-10-11
  • 2020-05-03
  • 2018-07-21
  • 2017-11-12
  • 1970-01-01
  • 2021-08-11
  • 2016-06-14
相关资源
最近更新 更多