2011-12-02 11 views
3

私は最近、自分の環境をノードv0.6.3にアップグレードしました。express/connect-formフォームイベントリスナーが起動しない

var fs = require('fs'), 
    client = require('../app'), 
    exec = require('child_process').exec, 
    socket = require('../socket') 

var supported = [ 'image/jpeg', 
        'image/pjpeg', 
        'image/bmp', 
        'image/gif', 
        'image/tiff', 
        'image/png'] 

var maxSize = 204800; 

module.exports = function(req, res) { 
    console.log(JSON.stringify(req.form)); 
    var tmpPath = ''; 
    req.form.on('fileBegin', function(err, fileInfo) { 
    console.log('upload file begin') 
    if (fileInfo.path) {tmpPath = fileInfo.path}; 
    socket.emit('attachment_upload_started', req.query.user, {friend: req.query.friend}, []); 
    }); 

    req.form.on('progress', function(bytesReceived, bytesExpected) { 
    var percent = (bytesReceived/bytesExpected * 100) | 0; 
    socket.emit('attachment_progress', req.query.user, {progress: percent, friend: req.query.friend}, []);  
     var child = exec('file --mime-type ' + tmpPath, function (err, stdout, stderr) { 
      var mimetype = stdout.substring(stdout.lastIndexOf(':') + 2, stdout.lastIndexOf('\n')); 
      if (!err && mimetype && supported.indexOf(mimetype)==-1 && mimetype!='Can\'t read SAT') { 
      socket.emit('attachment_error', req.query.user, {type: 'format', friend: req.query.friend}, []); 
      req.connection.destroy(); 
      req.connection.resume = function(){}; 
      console.log(mimetype) 
      console.log(err); 
      } 

      if (bytesExpected > maxSize) { 
      socket.emit('attachment_error', req.query.user, {type: 'size', friend: req.query.friend}, []); 
      req.connection.destroy(); 
      req.connection.resume = function(){} 
      } 
     }); 
     }); 

    req.form.complete(function(err, fields, files){ 
    console.log('form complete'); 
    if (!err) { 
     if (supported.indexOf(files.upload.mime)==-1) { 
     console.log(files.upload.mime); 
     socket.emit('attachment_error', req.query.user, {type: 'format', friend: req.query.friend}, []); 
     } 
     else { 
     socket.emit('attachment_complete', req.query.user, {friend: req.query.friend, file: files.upload}, []); 
     } 
    } 
    else { 
     console.log('err'); 
    } 
    res.redirect('/iattachment?user='+req.query.user+'&friend='+req.query.friend); 
    }); 
} 

ファイル実際に私の/ tmpディレクトリにそれを作るんが、req.form.complete内のコードのいずれかreq.form.on:私は、次のページにファイルアップロードフォームを投稿すると、午前( 'progress')、req.form.on( 'fileBegin')リスナーが実行されます。どんな助けもありがとう!

答えて

3

express.bodyParserをお使いですか?

問題は、expressに基づいているモジュールがバージョン2.0のように恐ろしいものを含んでいるということですが、誰もドキュメントや例を変更することを心配していませんでした。 (実際には、今すぐやってみましょう。)bodyParserをすでに使用している場合は、一時ファイルが既に作成されています。リクエストはすでに処理されており、ストリームはすべて読み込まれているため、コードは実際には行っていません。何か、そして入力を待っている。

"req.body"をチェックすると、すべてのファイル情報が含まれているはずです。それ以外の場合は、express.bodyParserを削除してみてください。

+0

はい、私はbodyParserを使用していました。それを削除すると、そのトリックが完了したように見えますが、他の機能が壊れています。ご協力いただきありがとうございます。 –

0

POSTデータを解析するにはbodyParserが必要です。

express.bodyParser.parse [ 'マルチパート/フォームデータを']削除このhttp://senchalabs.github.com/connect/middleware-bodyParser.html

を見てみてください。

私はこれをまだ私の目的のために動かすことができませんでした。私はすぐに大胆に使用してプログレスバーを送ることができます。しかし、何も引き起こされていません。

関連する問題