2014-09-22 7 views
4

GZIPOutputStream으로 파일을 업로드하기 전에 Java에서 파일을 압축하려고합니다. 업로드를 위해 gzipped 파일을 메모리에 저장하고 로컬 컴퓨터에서 gzipped 파일을 생성하지 않는 방법이 있습니까?GZIPOutputStream으로 압축하여 gzip 파일을 로컬로 생성하지 않고 업로드합니다.

감사합니다. GzipCompressingEntity

HttpPost httpPost = new HttpPost("https://host/stuff"); 
httpPost.setEntity(new GzipCompressingEntity(new FileEntity(new File("my.stuff")))); 
CloseableHttpResponse response = httpclient.execute(httpPost); 
try { 
    EntityUtils.consume(response.getEntity()); 
} finally { 
    response.close(); 
} 
+1

바이트 배열로 저장할 수 있습니다. –

답변

0

장식 컨텐츠 엔티티는 임시 파일에 기록하고, GZIP 업로드가 완료 된 후에는 임시 파일에 .deleteonexit를 수행하여이 문제를 해결했다.

도움 주셔서 감사합니다.

0

+0

일부 스트림을 사용하는 것이 가장 좋습니다.이 코드가 서버에서 실행되고 종료되지 않으면 어떻게됩니까? 또는 JVM을 충돌시키는 일부 오류가 있습니까? – Shawn

+0

서버로 직접 스트리밍하는 것이 좋습니까? 스트리밍이 JVM 충돌을 어떻게 처리합니까? Im은 현재'GZIPOutputStream'을 사용하여 임시 파일로 스트리밍 한 다음 서버에 업로드합니다. – lanczlot

2

GZipOutputStream을 출력 스트림에 직접 연결하고 쓰기 만하면됩니다. 필요한 파일이 없습니다.

+0

GzipCompressingEntity는 콘텐츠 길이/콘텐츠 형식/콘텐츠 인코딩 요청 헤더를 조정하고 메시지의 정확한 묘사를 보장하므로 권장되는 방법입니다. – oleg

+0

GzipCompressingEntity를 사용하는 방법을 찾지 못해서 많이 찾지 못했습니다. 난 그냥 클래스 GzipCompressingEntity의 엔터티를 만들고 내 put 요청에 엔티티로 설정하겠습니까? 내가 그렇게 할 때 나는 SocketTimepoutException을 얻는다. – lanczlot

+0

예, GzipCompressingEntity를 사용하여 다른 엔티티를 꾸미면됩니다. SocketTimepoutException은 GZIP 인코딩과 아무 관련이 없습니다. – oleg