2016-12-31 8 views
-1

NodeJSにファイルをアップロードできるAPIがあり、connect-busboyパッケージを使用してサーバー側で受け取っています。connect-busboyを使ってファイルをアップロードするためにNginxを設定する

ので、例えば、ここで要求を処理するコードの一部です:

var app = require('express')(); 
var busboy = require('connect-busboy'); 

app.use(busboy({ 
     highWaterMark: 2 * 1024 * 1024, 
     limits: { 
      fileSize: 1024 * 1024 * 1024 // 1 GB 
     }, 
     immediate: true 
    })); 

var busboyHandler = function (req, res) { 
    if (req.busboy) { 
     req.busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { 
      console.log('received file ', req.path, fieldname, file, filename, encoding, mimetype); 
     }); 

     req.busboy.on('field', function(key, value, keyTruncated, valueTruncated) { 
      console.log('field..', key, value, keyTruncated, valueTruncated); 
     }); 

     req.busboy.on('finish', function() { 
      console.log('busboy finished'); 
     }); 
    } 
}; 

app.post('api/documents/files', busboyHandler); 

私はnpm startでAPIを起動して、直接このAPIにファイルをアップロードする際にこれがうまく機能、しかし、とき私はNginx Dockerを設定します。実際には小さなファイルで動作しますが、ほとんどのファイルでは正常にアップロードされません。ここで

は私nginx.confファイルからの抜粋です:

user nobody nogroup; 
worker_processes auto;   # auto-detect number of logical CPU cores 

events { 
    worker_connections 512;  # set the max number of simultaneous connections (per worker process) 
} 

http { 
    include mime.types; 

    client_max_body_size 100M; 
    client_body_buffer_size 256k; 

    upstream api_doc { 
    server 192.168.2.16:4956; 
    } 

    server { 
    listen *:4000;    # Listen for incoming connections from any interface on port 80 
    server_name localhost;    # Don't worry if "Host" HTTP Header is empty or not set 
    root /usr/share/nginx/html; # serve static files from here 

    client_max_body_size 100M; 
    client_body_buffer_size 256k; 

    location /api/documents { 
     proxy_pass http://api_doc; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection 'upgrade'; 
     proxy_set_header Host $host; 
     proxy_cache_bypass $http_upgrade; 
    } 
    } 

} 

私はreceived fileログを参照してください、それはnginxの下にあるとき、busboy finishedログは、nginxのせずに直接APIを呼び出すときとは異なり、決してありません。

これらのNginx設定を変更しようとしましたが、動作しませんでした:client_max_body_sizeclient_body_buffer_size。 APIは、ファイル全体、またはすべてのチャンクの代わりに、大容量ファイルのチャンクのみを受け取るように思えます。

ご協力いただければ幸いです。

おかげで、 サイモン

+0

なぜここでダウンビューしますか? – simdrouin

答えて

0

は、それは私が、ファイルが完全にアップロードされた前の着信ストリームを読み始めていた、問題は別の場所だったことが判明し、それはいくつかの理由から、着信ストリームを破るにつながりました。

関連する問題