2013-04-11 3 views
0

클라이언트가 업로드 한 파일 수를 알 수없는 ExpressJS로 여러 파일 업로드를 처리해야합니다.ExpressJS EMFILE 오류없이 많은 파일 업로드

244 개가 넘는 파일을 업로드하려고하면 서버가 다운됩니다. 업로드 양식과 uploadHandle 조치 사이의 업로드 중에 오류가 발생합니다.

제한이 나는 10000로 설정 한 경우에도, 내 서버가있는 경우 충돌이 있기 때문에 조금 더러운 것 같다 ulimit를을 증가 (파일은 모두 첫 번째 (244), 내/공공/업로드 폴더에 복사되지 않습니다) 다른 사람이 파일을 더 업로드하려고합니다.

어떻게 처리 할 수 ​​있습니까?

감사합니다.

+0

isaacs는 당신을 사랑합니다. https://github.com/isaacs/node-graceful-fs – generalhenry

답변

1

많은 파일을 한 번에 만들지 않는 것이 올바른 접근 방식입니다. 레거시 브라우저를 지원할 필요가없는 경우 HTML5 File Api을 사용하여 브라우저에서 대기열에 넣는 등 여러 가지 방법으로 처리 할 수 ​​있습니다.

서버 쪽에서 파일을 받으면 스트리밍하여 열려있는 파일 포인터를 만들지 않고 메모리에 버퍼링 할 수도 있습니다. 모든 파일을 열고 어떻게 든 처리해야한다면, 제안 된대로 node-graceful-fs이 해당 영역을 도울 수 있습니다.

+0

서버 측에서 처리하려고하는데 Express가 요청을 처리하는 방식으로 원하는 것을 구현하지 못합니다. 나는 [node-multiparty] (https://github.com/superjoe30/node-multiparty)를 사용하여 시도했지만, 서버 파손을 파싱하려고하자마자 시도했다. 내가 놓친 게 있니? – emainier

+1

기본적으로 express의 본문 파서는 원하는 내용이 아닌 전체 본문을 구문 분석합니다. 너무 많은 메모리와 버퍼에 즉시 넣을 수 있기 때문입니다. node-multiparty를 살펴보고이 예제는 https://github.com/superjoe30/node-multiparty/blob/master/examples/s3.js입니다. 그는 들어오는 파일 업로드를 amazon s3으로 스트리밍하고 있지만 파일 시스템으로 파일을 스트리밍하고 [async.queue()] (https : // github)와 같이 비동기식 대기열을 사용하여 한 번에 스트리밍하는 스트림의 수를 제어 할 수도 있습니다. co.kr/caolan/asynC# queue) –

+0

async.queue를 사용하려고했지만 문제는 다중 상대가 파일 업로드를 처리하는 방식이라고 생각합니다. 문제가 발생했습니다. – emainier