2016-07-20 23 views
0

アップロードされた画像をクライアントからサーバーに送信しようとしています。 私はこの方法でそれをやっている:サーバーでブザー 'ファイルリミット'イベントが発生しません

... 
var files = document.getElementById('myForm').files; 
var formData = new FormData(); 
formData.append('image', files[0]); 
$.ajax({ 
    url: '/upload', 
    data: formData, 
    processData: false, 
    contentType: false, 
    type: 'POST', 
    success: function(data){ 
     alert(JSON.stringify(data)); 
    } 
}); 
... 

私はExpressを使用しています。

... 
router.post('/upload', function(req, res, next) { 
    req.pipe(req.busboy); 
    req.busboy.on('file', function (fieldname, file, filename) { 
    //do something 
    }); 
    req.busboy.on('filesLimit', function(){ 
    //do something 
    }); 
}); 
... 

と私は、接続-busboyコンストラクタで3メガバイトへfileSizeオプション設定アップロードされたファイルのファイルサイズ制限を設定するには::

を次に、サーバー上のアップロードされたファイルにアクセスするために、私は connect-busboyモジュールを使用します
... 
app.use(
    busboy({ 
     limits: { 
     fileSize: 3*1024 //3 mb 
     } 
    }) 
); 
... 

問題は、私は3メガバイト、filesLimitイベントが何よりも大きなサイズの画像をアップロードしていたときにということです火災さらに悪いことに、fileこの瞬間にイベントが発生し、(!)ファイルのわずか3 MBが利用可能になります。

どうしたのですか?なぜfilesLimitイベントは起こりませんか?ご協力いただきありがとうございます!

答えて

0

私自身の質問に答える。

ファイルサイズ制限イベントリスナーを間違った方法で添付しています。このようにストリームであるファイルオブジェクトにイベントをアタッチする必要があることが判明しました。

req.busboy.on('file', function (fieldname, file, filename) { 
    file.on('limit', callback); // <- here is 
}); 
関連する問題