使用 multer 上傳單個檔案

記得

  • 建立用於上傳的資料夾(示例中為 uploads)。
  • 安裝 multer npm i -S multer

server.js

var express =   require("express");
var multer  =   require('multer');
var app         =   express();
var fs = require('fs');

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

var storage =   multer.diskStorage({
  destination: function (req, file, callback) {
    fs.mkdir('./uploads', function(err) {
        if(err) {
            console.log(err.stack)
        } else {
            callback(null, './uploads');
        }
    })
  },
  filename: function (req, file, callback) {
    callback(null, file.fieldname + '-' + Date.now());
  }
});

app.post('/api/file',function(req,res){
    var upload = multer({ storage : storage}).single('userFile');
    upload(req,res,function(err) {
        if(err) {
            return res.end("Error uploading file.");
        }
        res.end("File is uploaded");
    });
});

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

index.html

<form id        =  "uploadForm"
     enctype   =  "multipart/form-data"
     action    =  "/api/file"
     method    =  "post"
>
<input type="file" name="userFile" />
<input type="submit" value="Upload File" name="submit">
</form>

注意:

要上傳帶副檔名的檔案,你可以使用 Node.js 路徑內建庫

為此只需要 pathserver.js 檔案:

var path = require('path');

並改變:

callback(null, file.fieldname + '-' + Date.now());

以下列方式新增副檔名:

callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));

如何按擴充套件程式過濾上傳:

在此示例中,檢視如何上載檔案以僅允許某些擴充套件。

例如,僅影象副檔名。只需新增到 var upload = multer({ storage : storage}).single('userFile'); fileFilter 條件

var upload = multer({
    storage: storage,
    fileFilter: function (req, file, callback) {
        var ext = path.extname(file.originalname);
        if(ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') {
            return callback(new Error('Only images are allowed'))
        }
        callback(null, true)
    }
}).single('userFile');

現在,你只能上傳帶有 pngjpggifjpeg 副檔名的影象檔案