formidable使用


接收普通參數 

var formidable = require("formidable");

//處理 發布的 商品
exports.doPublishGoods=function(req,res){
    var form=new formidable.IncomingForm();
    form.parse(req,function(err,fields,files){
        if(err){
            res.json({"results":-1});//-1表示服務器錯誤
            return;
        }
        console.log(fields);
        res.json({'results':1});//1表示成功
    })
}

涉及文件以及 圖片的上傳  

在form標簽上加上固定寫法的屬性為enctype="multipart/form-data",否則文件或圖片會上傳失敗。

其中<input type="file" name="uploadImg">,當中的name屬性一定要賦值。
const formidable = require('formidable');
const fs = require('fs');
const path = require('path');
const http = require('http');//處理 發布的 商品
exports.doPublishGoods=function(req,res){

    var form=new formidable.IncomingForm();
   form.uploadDir = "./uploads";//設置上傳文件存放的文件夾
    form.keepExtensions = true;//設置該屬性為true可以使得上傳的文件保持原來的文件的擴展名
    form.parse(req, function(err, fields, files) {
        if(!files.studentexcel.name){
            res.send("對不起,請上傳文件!");
        }

        //檢查拓展名是否正確
        if(path.extname(files.studentexcel.name) != ".xlsx"){
            //刪除這個不正確的文件
            fs.unlink("./" + files.studentexcel.path,function(err){
                if(err){
                    console.log("刪除文件錯誤");
                    return;
                }
                res.send("對不起,上傳的文件類型不正確,你上傳的已經從服務器刪除");
            });
            return;
        }
}

部分轉載於https://www.cnblogs.com/qcxc/p/7163429.html

 

1)     創建Formidable.IncomingForm對象

   var form = new formidable.IncomingForm()

2)     form.encoding = 'utf-8' 設置表單域的編碼

3)     form.uploadDir = "/my/dir"; 設置上傳文件存放的文件夾,默認為系統的臨時文件夾,可以使用fs.rename()來改變上傳文件的存放位置和文件名

4)     form.keepExtensions = false; 設置該屬性為true可以使得上傳的文件保持原來的文件的擴展名。

5)     form.type 只讀,根據請求的類型,取值'multipart' or 'urlencoded'

6)     form.maxFieldsSize = 2 * 1024 * 1024; 限制所有存儲表單字段域的大小(除去file字段),如果超出,則會觸發error事件,默認為2M

7)     form.maxFields = 1000 設置可以轉換多少查詢字符串,默認為1000

8)     form.hash = false; 設置上傳文件的檢驗碼,可以有兩個取值'sha1' or 'md5'.

9)     form.multiples = false; 開啟該功能,當調用form.parse()方法時,回調函數的files參數將會是一個file數組,數組每一個成員是一個File對象,此功能需要 html5中multiple特性支持。

10)   form.bytesReceived 返回服務器已經接收到當前表單數據多少字節

11)   form.bytesExpected 返回將要接收到當前表單所有數據的大小

12)   form.parse(request, [callback]) 該方法會轉換請求中所包含的表單數據,callback會包含所有字段域和文件信息,如:

    form.parse(req, function(err, fields, files) {

      // ...   

    });

13)    form.onPart(part); 你可以重載處理multipart流的方法,這樣做的話會禁止field和file事件的發生,你將不得不自己處理這些事情,如:

     form.onPart = function(part) {

       part.addListener('data', function() {

                 // ...

       });

   }

    如果你只想讓formdable處理一部分事情,你可以這樣做:

    form.onPart = function(part) {

      if (!part.filename) {

           // 讓formidable處理所有非文件部分

           form.handlePart(part);

      }

   }

14)   formidable.File對象

  A.      file.size = 0 上傳文件的大小,如果文件正在上傳,表示已上傳部分的大小

  B.      file.path = null 上傳文件的路徑。如果不想讓formidable產生一個臨時文件夾,可以在fileBegain事件中修改路徑

  C.      file.name = null 上傳文件的名字

  D.     file.type = null 上傳文件的mime類型

  E.      file.lastModifiedDate = null 時間對象,上傳文件最近一次被修改的時間

  F.      file.hash = null 返回文件的hash值

  G.     可以使用JSON.stringify(file.toJSON())來格式化輸出文件的信息

15)   form.on('progress', function(bytesReceived, bytesExpected) {}); 當有數據塊被處理之后會觸發該事件,對於創建進度條非常有用。

16)   form.on('field', function(name, value) {}); 每當一個字段/值對已經收到時會觸發該事件

17)   form.on('fileBegin', function(name, file) {});  在post流中檢測到任意一個新的文件便會觸發該事件

18)   form.on('file', function(name, file) {}); 每當有一對字段/文件已經接收到,便會觸發該事件

19)   form.on('error', function(err) {}); 當上傳流中出現錯誤便會觸發該事件,當出現錯誤時,若想要繼續觸發request的data事件,則必須手動調用request.resume()方法

20)   form.on('aborted', function() {}); 當用戶中止請求時會觸發該事件,socket中的timeout和close事件也會觸發該事件,當該事件觸發之后,error事件也會觸發

21) form.on('end', function() {}); 當所有的請求已經接收到,並且所有的文件都已上傳到服務器中,該事件會觸發。此時可以發送請求到客戶端。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM