2009-04-13 2 views
2

상당히 큰 파일 (> 50 MBytes)을 클라이언트에서 서버로 업로드해야하는 Struts 1 웹 응용 프로그램이 있습니다. 현재 org.apache.struts.upload.DiskMultipartRequestHandler를 사용하여 HTTP POST multipart/form-data 요청을 처리하고 있습니다. 정상적으로 작동하지만 초당 약 100KB로 업로드하는 속도가 매우 느립니다.Struts 느린 성능 업로드

동일한 대용량 파일을 서버에서 클라이언트로 다운로드하는 속도가 10 배 이상 빠릅니다. 나는 이것이 동일한 서버에 파일을 전송하기 위해 간단한 FTP 클라이언트를 사용하기 때문에 시간의 1/3 미만을 차지하기 때문에 이것이 내 ISP의 업로드 속도와 다운로드 속도의 차이 일 뿐이라고 생각하지 않습니다.

내장 된 DiskMultipartRequestHandler를 새로운 org.apache.commons.fileupload 패키지로 바꾸는 방법을 살펴 보았습니다. 그러나이 방법을 수정하여 Struts 1에 필요한 MultipartRequestHandler를 만드는 방법을 모르겠습니다.

Barend는 web.xml에서 설정할 수있는 'bufferSize'매개 변수가 아래에 주석으로 표시되어 있습니다. 버퍼 크기를 100KB로 늘렸으나 성능을 향상시키지 못했습니다. DiskMultipartRequestHandler의 구현을 살펴보면, 멀티 패스 경계 문자를 찾기 위해 한 번에 한 바이트 씩 스트림을 읽으므로 해당 성능이 일 수 있다고 생각됩니다.이 제한 될 수 있습니다.

큰 파일을 업로드하는 데 Struts를 사용하는 사람이 있습니까?

누군가 Struts 1과 함께 제공되는 기본 DiskMultipartRequestHandler를 사용자 정의 했습니까?

대용량 파일을 업로드하는 동안 좀 더 기다려야합니까? :-)

답변

2

Apache wiki의 StrutsFileUpload 페이지에는 사용할 수있는 여러 구성 설정이 포함되어 있습니다. 내게 두드러지는 것은 4096 바이트의 기본 버퍼 크기입니다. 아직 업로드하지 않은 경우이 값을 훨씬 더 크게 설정해보십시오 (업로드 할 때마다 버퍼가 할당됨에 따라 지나치게 크지는 않음). 2MB의 가치는 합리적인 것처럼 보입니다. 업로드 속도가 크게 향상 될 것으로 판단됩니다.

+0

그게 좋은 생각입니다! 나는 전에 그것을 알아 차리지 못했다. 감사! 불행히도, 나는 지금 막 시도해 보았고 실제로 변화를 가져 오지 않았다. –

1

Apache Commons를 사용하면 을 사용하면 파일을 더 유연하게 업로드 할 수 있습니다. 파일을 교환하기 위해 업로드 파일 크기 (최대 파일 크기)와 임시 파일 위치를 구성 할 수 있으므로 성능이 향상됩니다. 이 링크를 방문하십시오 http://commons.apache.org/fileupload/using.html

+0

이 구현은보다 융통성이 있으며 디스크에 저장하기로 결정하기 전에 전체 업로드를 메모리에 보관할 수도 있습니다. 그러나 매우 큰 (> 50 MBytes) 파일에 영향을주는 것은 무엇입니까? –

+0

디스크에 저장하기 전에 전체 파일을 메모리에로드하지 않습니다. 이것을 사용하십시오. fileItem.write (대상); – Tony