5

busboy モジュールを使用して、以下の coffeeScript コードでマルチパート リクエストを解析しました。問題は、1 つのファイルを含む要求に対して複数回呼び出される「データ」ハンドラーにある場合があります。つまり、全体のサイズを計算するには、各サイズを合計する必要があります。on 'file' ハンドラのファイル オブジェクトに加えて、サイズ情報が含まれていないようです。

各部分を計算せずに全体のサイズを取得する方法は?

前もって感謝します-

busboy.on 'file', (fieldname, file, filename, encoding, mimetype) ->
  filename = "#{Meteor.uuid()}.jpg"
  dir = "#{HomeDir()}/data/profile"
  saveTo = path.join dir, filename
  file.pipe fs.createWriteStream saveTo
   files.push
     filename: filename
     path: saveTo
     fileSize: data.length
  file.on 'data', (data) ->
    # this data handler called several times 
    files.push
      filename: filename
      path: saveTo
      fileSize: data.length    
  file.on 'end', ->
    console.log 'file finished'
4

2 に答える 2

4

これは非常に遅い応答です。お役に立てば幸いです。

request.headers['content-length']ファイル全体のサイズが表示されます。その必要はありませんbusboy。これは request オブジェクトの一部であり、次のようにアクセスできます。

http.createServer(function(request, response) {

      /* request handling */

      console.log("File size:" + request.headers['content-length'] / 1024 + "KB");

      /* busboy code to parse file */

    }

ヘッダー サイズ情報を使用してファイル転送の進行状況を追跡する例は、次の場所にあり ます。 NodeJS - Core NodeJS とオリジナルの Node ソリューションを使用した進行状況バー付きのファイル アップロード

編集:

@Matthias Tylkowski が指摘したように、コンテンツの長さはファイル サイズと同じではありません。

それ以来、私自身のコードも変更されました。NODEJS を使用して実装したファイル アップローダーで、HTML5 File APIを使用してファイル サイズを直接読み取り、それを nodejs サーバーに渡していることに気付きました。

于 2018-08-31T08:05:38.163 に答える