웹 응용 프로그램에서 사용자가 Excel/CSV 형식으로 보고서를 다운로드 할 수있는 기능을 제공해야합니다. 일단 내가 만든 웹 응용 프로그램에서 모듈을 만든 다음 그것을 읽고 브라우저로 보냈습니다. 그것은 올바르게 작동했다. 이번에는 파일 시스템에 대한 제어 수준이 없기 때문에 Excel 파일을 생성하고 싶지 않습니다. 한 가지 방법은 StringBuffer에서 적절한 코드를 생성하고 올바른 contenttype을 설정하는 것입니다 (이 방법에 대해서는 확실하지 않습니다). 다른 팀도이 기능을 가지고 있지만 데이터가 매우 클 때 어려움을 겪고 있습니다. 데이터 크기를 고려할 때이 기능을 제공하는 가장 좋은 방법은 매우 클 수 있습니다. 클라이언트가 알아 차리지 않고 청크로 데이터를 보낼 수 있습니까 (다운로드 지연 제외). 내가 추가하는 것을 잊어 버리는 한 가지 문제는 매우 큰 데이터가있을 때, 또한 서버 측 (CPU 사용 및 메모리 소비)에 문제를 생성한다는 것입니다. 500과 같은 일정량의 레코드를 읽고 고객에게 보낸 다음 완료 될 때까지 또 다른 500을 읽을 수 있습니까?자바를 사용하여 큰 csv 파일을 효율적으로 다운로드하는 방법
2
A
답변
2
또한 CSV 대신 HTML을 생성하고 콘텐츠 형식을 Excel로 설정할 수도 있습니다. 이것은 채색 및 스타일이 지정된 텍스트에 좋습니다.
클라이언트가 압축을 허용하면 gzip 압축을 사용할 수도 있습니다. 일반적으로 서블릿 필터와 같은 표준 방법이 있습니다.
결코 StringBuffer 또는 더 나은 StringBuilder. 더 나은 스트리밍. setContentength를 호출 할 수 없으면 (예측할 수 없음) 출력이 청크 분할됩니다.
0
URL url = new URL("http://localhost:8080/Works/images/address.csv");
response.setHeader("Content-Type", "text/csv");
response.setHeader("Content-disposition", "attachment;filename=myFile.csv");
URLConnection connection = url.openConnection();
InputStream stream = connection.getInputStream();
BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
int len;
byte[] buf = new byte[1024];
while ((len = stream.read(buf)) > 0) {
outs.write(buf, 0, len);
}
outs.close();
관련 문제
- 1. 큰 CSV 파일을 다운로드하는 방법은 무엇입니까?
- 2. 큰 파일을 자바를 사용하여 다운로드하십시오.
- 3. 이동을 사용하여 큰 파일을 효율적으로 다운로드하려면 어떻게해야합니까?
- 4. 자바를 사용하여 나머지 웹 서비스에서 다른 유형의 파일을 다운로드하는 방법
- 5. jquery를 사용하여 CSV 파일을 다운로드하는 방법은 무엇입니까?
- 6. 큰 csv 파일을 사용하는 방법
- 7. 웹 사이트에서 CSV 파일을 다운로드하는 방법
- 8. Objective-C의 서버에서 CSV 파일을 다운로드하는 방법
- 9. 자바를 사용하여 Google 응용 프로그램에서 CSV 파일을 작성하는 방법
- 10. 자바를 사용하여 아랍어 문자를 포함하는 csv 파일을 읽는 방법
- 11. 자바를 통해 CSV 출력
- 12. 지불 후 큰 오디오 파일을 다운로드하는 방법
- 13. C에서 큰 파일을 프로그래밍 방식으로 다운로드하는 방법
- 14. HTTP를 통해 큰 파일을 루비로 다운로드하는 방법
- 15. 블록에서 큰 파일을 효율적으로 읽는 방법 R
- 16. WebClient 클래스를 사용하여 큰 비디오 파일을 다운로드하는 방법
- 17. ExtJS 4 - Ajax를 사용하여 파일을 다운로드하는 방법?
- 18. 큰 csv 파일을 데이터베이스에 삽입
- 19. 자바를 사용하여 보호 된 웹 페이지를 다운로드하는 방법
- 20. 다른 웹 서버에서 내 웹 사이트의 CSV 파일을 다운로드하는 방법?
- 21. PHP : 내 Gmail 계정에서 점 csv 파일을 다운로드하는 방법?
- 22. 자바를 사용하여 압축 XML 파일을 읽는 방법
- 23. 큰 활성 Python 로그 파일을 효율적으로 읽음
- 24. 리눅스에서 파이썬에서 windows newline을 사용하여 csv 파일을 효율적으로 읽음
- 25. Java에서 파일을 다운로드하는 방법?
- 26. 파일을 PHP로 다운로드하는 방법
- 27. 오디오 파일을 다운로드하는 방법
- 28. 게에서 파일을 다운로드하는 방법
- 29. memoryStream 파일을 다운로드하는 방법
- 30. 자바 스크립트를 사용하여 .text 파일을 다운로드하는 방법
설명해 주실 수 있습니까? 결코 StringBuffer 또는 더 나은 StringBuilder. 더 나은 스트리밍. – dmay
StringBuffer가 (불필요한) 동기화를 가지고 있기 때문에 StringBuffer는 이후 StringBuilder보다 성능이 떨어집니다. 그리고 물론 StringB *에서 많은 것을 먼저 수집하고 그것을 스트리밍하고 싶지는 않습니다. 이를 스트리밍하는 파이프 라인이 훨씬 효율적입니다. 특히 다중 사용자 시나리오의 경우 더욱 그렇습니다. –
약 1000 개의 레코드에 대한 데이터베이스를 쿼리 한 다음 클라이언트에게 보내고 다음 배치를 가져옵니다. 이것은 나의 기억 발자취를 대단히 감소시킨다. 나는 프로파일 러에서 메모리를 테스트하고 확인했으며 정상적으로 작동합니다. 이제는 내 응용 프로그램이 많은 메모리를 사용하지 않습니다. 프로파일 러에서 메모리 사용이 위험 수준에 도달 할 때마다 가비지 수집됨을 알 수 있습니다. – dmay