天天看點

Nodejs開發技巧集錦(4):使用multiparty擷取上傳的表單檔案

1、安裝multiparty

cnpm install multiparty --save      

2、引入

var multiparty = require('multiparty');
var fs = require('fs'); //檔案子產品      

3、表格一定要含有enctype="multipart/form-data"

<form action="/doProductAdd" method="post" enctype="multipart/form-data">
     商品名稱: <input type="text" name="title"/>
     商品圖檔: <input type="file" name="pic"/>   
</form>      

4、擷取普通表單值和檔案

app.use('/upload',express.static('upload'));//設定虛拟靜态目錄
    var form = new multiparty.Form();//執行個體化表單
    form.uploadDir='upload';//定義上傳路徑為根目錄/upload
    form.parse(req, function (err, fields, files) {
        var title = fields.title[0];
        var pic = files.pic[0].path;

       //...将檔案路徑和标題存入資料庫
    });      

說明:實際開發中,我們經常會更換商品的圖檔,

app.post('/doProductEdit',function (req, res) {

    var form = new multiparty.Form();
    form.uploadDir='upload';
    form.parse(req, function (err, fields, files) {
        var _id = fields._id[0];
        var title = fields.title[0];
        var pic = files.pic[0].path;//上傳則有原始路徑,沒上傳則有一個無效檔案的路徑

      //上傳則原始檔案不為空,沒上傳則為空,可以此判斷使用者是否更換圖檔
        var originalFileName = files.pic[0].originalFilename;


//如果不為空:說明使用者上傳了圖檔,那麼需要更新pic字段
        if(originalFileName){
            var setData = {
                title,
                pic
            }
        }else{//如果為空:說明使用者沒有上傳圖檔,那麼不需要更新pic字段
            var setData = {
                title,
            };
            //即使沒有上傳圖檔。系統會自動上傳一個無效檔案,是以删除
            fs.unlink(pic,function () {
                
            });
        }

    
    });
});