2016-12-31 14 views
-1

NodeJS에 파일을 업로드 할 수있는 API가 있으며 서버 측에서 connect-busboy 패키지를 사용하여 수신합니다.connect-busboy를 사용하여 파일 업로드를위한 Nginx 구성

따라서, 예를 들어, 여기에 요청을 처리하는 코드의 일부이다

: 그러나, 나는 npm start으로 API를 시작하고 직접 API에 파일을 업로드 할 때

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); 

이 잘 작동을 할 때 나는 Nginx Docker를 구성한다. 그것은 정말로 작은 파일들에 대해 작동하지만, 대부분의 파일들에 대해서는 성공적으로 업로드되지 않는다.

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에 아래 때, Nginx에없이 직접 API를 호출 할 때와는 달리 busboy finished 로그가 결코 : 여기

nginx.conf 파일에서 발췌 한 것입니다.

이 Nginx 구성을 변경하려고했지만 작동하지 않았습니다. client_max_body_size, client_body_buffer_size. 필자는 API가 전체 파일 대신에 큰 파일이나 모든 청크 파일의 덩어리 만받는 것처럼 보입니다.

도움을 주시면 감사하겠습니다.

덕분에, 사이먼

+0

왜 여기에 downvote? – simdrouin

답변

0

은 내가 파일이 완전히 업로드되기 전에 입력 스트림을 읽기 시작했다, 문제가 다른 것을 밝혀졌다, 그래서 몇 가지 이유에 대한 입력 스트림을 파괴되었다.