Uncategorized — 05 July 2018

같은 스프링 MVC 응용 프로그램에서 파일을 다운로드에 대 한 몇 가지 방법이 있습니다. open () 파일 시스템, 데이터베이스 BLOB, amazon S3 등의 실제 파일을 읽을 수 있습니다. 우리는 점차적으로 파일 크기와 MIME 형식과 같은 더 많은 고급 기능을 지원 하기 위해 filepointer을 확장할 것입니다. 검색 및 만들기 프로세스는 FileStorage 추상화에 의해 규율 됩니다: 스트리밍 우리는 메모리와 GC에 큰 영향을 주지 않고 동시 요청을 수백 처리할 수 있습니다 (작은 버퍼 ioutils에 할당 됩니다). BTW 나는 이름 또는 시퀀스 번호의 다른 형태가 아닌 파일을 식별 하기 위해 UUID를 사용 하 여. 이렇게 하면 개별 리소스 이름을 추측 하기 어렵게 되므로 더 안전 합니다 (모호한). 그 다음 기사에서 더. 이 기본 설정을 갖는 우리는 안정적으로 메모리에 미치는 영향을 최소화와 동시 연결을 많이 제공할 수 있습니다. 봄 프레임 워크 및 기타 라이브러리 (예: 서블릿 필터)에 많은 구성 요소가 반환 하기 전에 전체 응답을 버퍼링 할 수 있습니다 기억 하십시오. 따라서 거 대 한 파일을 다운로드 하려고 통합 테스트를 하는 것이 정말 중요 합니다 (수만의 gib) 및 응용 프로그램이 충돌 하지 않도록 만들기.

브라우저에서 파이어 URL은 파일을 다운로드 합니다. http://localhost:8080/downloadFile 다양 한 파일을 다운로드 (중 텍스트 또는 이진) 빵과 모든 엔터 프 라이즈 애플 리 케이 션의 버터입니다. PDF 문서, 부착, 매체, 실행 파일, CSV의 아주 큰 파일, 등등. 거의 모든 응용 프로그램, 조만간, 다운로드의 일부 양식을 제공 해야 합니다. 다운로드는 HTTP의 관점에서 구현 되므로 완전히이 프로토콜을 수용 하 고 그것을 최대한 활용할 중요 합니다. 특히 캐싱 또는 사용자 경험 같은 인터넷에 직면 응용 프로그램 기능을 고려 가치가 있다. 이 연재 기사에서는 모든 종류의 다운로드 서버를 구현할 때 고려해 야 할 측면 목록을 제공 합니다. 나는 “모범 사례” 용어를 피하기 참고, 이들은 단지 내가 유용 하지만 반드시 항상 적용 되지 않습니다 찾을 지침입니다. 가장 큰 확장성 문제 중 하나를 스트리밍 전에 전체 파일을 메모리로 로드 하는 것입니다. 바이트에 전체 파일을 로드 하는 [] 나중에 봄 MVC 컨트롤러에서 예측할 수 없는 규모의 예를 들어 반환 합니다.

서버에서 사용 하는 메모리의 양은 동시 연결의 수에 비례하여 좌우 됩니다. 평균 파일 크기-당신이 정말로 그렇게 많이 의존 하지 않으려는 요인. 서버에서 클라이언트 바이트 (버퍼링 포함)로 직접 파일의 내용을 스트리밍하는 것은 매우 쉬우며 실제로 많은 기술이 적용 됩니다. 가장 쉬운 방법은 수동으로 바이트를 복사 하는 것입니다. 여기에 봄 부팅 다운로드 파일 예제 하지만이 코드는 또한 봄 MVC에 대 한 뿐만 아니라 작동 합니다. 나는 최신 dev 부호를 가진 Spring.NET 나머지 그리고 사회적인 dlls를 새롭게 했다. 공식 버전은 곧 출시 될 예정 이다. 당신은 Spring.NET rest 코드 저장소에 대 한 분기 ` 1.1. x `로 전환 해야 합니다 참고: https://github.com/SpringSource/spring-net-rest/tree/1.1.x FYI, 문제의 기원은 Spring.NET 나머지에 위치 하 고 있습니다.

` Range ` 헤더는 실제로 webhttpclientrequest에 의해 처리 되지 않습니다. 참조 https://github.com/SpringSource/spring-net-rest/blob/master/src/Spring.Rest/Http/Client/WebClientHttpRequest.cs#L471이 제한 된 헤더를 지 원하는 문제를 만들었습니다: https://jira.springsource.org/browse/SPRNETREST-28 스프링 주석 기반 구성을 기반으로 하는 서블릿 3.x 응용 프로그램. 그래서, 아니 웹 .xml, 아니 spring. xml을. 난 50만 기록 (` 500, 000 `) userdetail 모델의 MySQL 데이터베이스를 로드 했습니다. Sample-SQL-File-500000rows에서 샘플 데이터를 다운로드할 수 있습니다.

Share

About Author

admin

(0) Readers Comments

Comments are closed.