2017-02-18 9 views
0

Node.jsにファイルをサーバーにアップロードするためのプログラムをコーディングしています。リクエストハンドラメソッドでは、fs.createWriteStream()を使用しています。サイズが2 GB未満のすべてのファイルで正常に動作します。しかし、2GB以上のサイズのファイルに対してRangeErrorが発生しています。スタックトレースは次のとおりです。Node jsのストリームを使用して大きなファイルをアップロードする際のRangeError

RangeError: Invalid typed array length 
at Buffer.Uint8Array (native) 
at FastBuffer (buffer.js:8:1) 
at createUnsafeBuffer (buffer.js:33:12) 
at allocate (buffer.js:176:12) 
at Function.Buffer.allocUnsafe (buffer.js:136:10) 
at Function.Buffer.concat (buffer.js:327:23) 
at internals.Recorder.collect 

どうすれば解決できますか?

+0

関連するコードをすべて表示してください。 – Jackowski

答えて

0
server.route({ 
method: 'POST', 
path: '/upload', 
config: { 
    payload: { 
     output: 'stream', 
     parse: true, 
     allow: 'multipart/form-data', 
     maxBytes: 2147483648, 
     timeout: false 
    }, 
    handler: function (request, reply) { 
     console.log('Uploading to local server...'); 
     var data = request.payload; 
     if (!data.asset) 
      reply({ success: false, errType : 0, msg: 'File not sent' }).type('application/json'); 

     var assetName = data.asset.hapi.filename; 
     fs.stat(`${__dirname}/uploads`, (err) => { 
      if (err) { 
       fs.mkdirSync(`${__dirname}/uploads`); 
      } 

      var path = __dirname + "/uploads/" + assetName; 
      var file = fs.createWriteStream(path); 
      file.on('error', function (err) { 
       console.error(new Error(err)); 
       reply({ success: false, errType : 1, msg: err, filename: assetName }).type('application/json'); 
      }); 
      data.asset.pipe(file); 
      data.asset.on('end', function (err) { 
       if (err) { 
        console.error(new Error(err)); 
        reply({ success: false, errType : 1, msg: err, filename: assetName }).type('application/json'); 
       } 

これはコードの一部です。ペイロードはストリームに変換され、ファイルに書き込まれます。

関連する問題