天天看點

nodejs上傳檔案--multer

上傳單個檔案的方法

1.在routes目錄下添加upload.js檔案(如果沒有multer子產品,則使用 npm install multer 來下載下傳)

upload.js

var router = require('express').Router();
var multer = require('multer');
var gFilename = "";
var storage = multer.diskStorage({
    destination: function (req, file, callback) {
        callback(null, './tmp');   //此目錄是項目根目錄下的tmp目錄,一定要確定此目錄存在,否則上傳失敗
    },
    filename: function (req, file, callback) {
        gFilename = file.originalname;
        callback(null, gFilename);
    }
});
var upload = multer({storage: storage}).any();

router.post('/', function (req, res, next) {
    res.setTimeout(25000, function () {
        if (res.finished) {
            return;
        }
        var rtRes = {
            rstcode: "error",
            desc: "system timeout",
            data: {}
        };
        console.log("system response timeout");
        res.writeHead(501, {"Content-Type": "text/html"});
        res.write(JSON.stringify(rtRes));
        res.end();
    });

    upload(req, res, function (err) {
        if (res.finished) {
            return;
        }
        var rst = {
            rstcode: "error",
            desc: "上傳失敗",
            data: {filename: {}}
        };
        if (err) {
            return res.end(JSON.stringify(rst));
        }
        rst.rstcode = "success";
        rst.desc = "上傳成功";
        rst.data.filename = gFilename;
        res.end(JSON.stringify(rst));
    });
});
module.exports = router;
           

2.在app.js檔案中引入upload檔案

var upload = require('./routes/upload');

app.use('/fileupload', upload);
           

3.測試表單

<form id="uploadForm" enctype="multipart/form-data" action="/fileupload" method="post">
    <input type="file" name="filename"/>
    <input type="submit" value="添加">
</form>
<!-- enctype="multipart/form-data"這句話的作用是将檔案以二進制的形式上傳,這樣可以實作多種類型的檔案上傳 -->
           

具體可以檢視node_modules目錄下的multer子產品中的README.md檔案,有詳細的介紹,這裡告訴大家一個小技巧,nodejs的每個子產品裡邊都有README.md檔案,是對該子產品的詳細介紹,以及該子產品如何使用(有小例子),非常友善

繼續閱讀