아파치 HC API에 익숙하지 않습니다. 서버 (10 GB) on cloud environment
에서 거대한 파일을 다운로드하려고 시도하고 나서 Amazon S3에 업로드해야합니다.ChunkedInputStream은 내부적으로 Apache HttpClient 4.x와 어떻게 작동합니까?
파일이 너무 크면 transfer encoding as chunked
및 gzip format
이됩니다. Cloud env에는이 파일을 임시 파일로 저장하기에 충분한 디스크 공간이 없으며 해당 파일을 메모리에 저장할 수도 없습니다.
주로 나는 2 개 인터페이스,
ResourceDownloader {
InputStream download(AbstractChannel channel);
}
ResourceUploader{
void upload(AbstractChannel channel, InputStream inputStream);
}
1 부이 : 다음과 같은 구조 아파치 HttpClient를 lib 디렉토리를 사용하는 동안
, 내가보고하고 반환 HTTP 응답을,
ResponseEntityProxy contains >> { - BasicHttpEntity [WrappedEntity] - content as ChunkeInputStream }
이 응답은 전체 10GB의 의미는 client.execute (getMethod) 호출 완료 후 클라이언트 측의 메모리 바이트 버퍼에서 사용할 수 있습니까?
또는 아래와 같이 읽기를 호출하자마자 서버에서 청크가 나옵니까? [리얼 경우, 디스크가 제공되지 않을 것이나, 아래 단지 데모입니다]
try {
FileOutputStream fos = (FileOutputStream) outputStream;
if(inputStream instanceof GZIPInputStream) {
byte[] buffer = new byte[1024];
int len;
while((len = inputStream.read(buffer)) != -1){
fos.write(buffer, 0, len);
}
//close resources
fos.close();
inputStream.close();
}
} catch (IOException e) {
logger.error("Exception occurred while processing file on disk", e);
}
2 부 :
나는 내용 길이 또는 사용 가능한 전체 파일이있는 경우 나, 멀티 파트 업로드를 알고 있지만 청크 입력 스트림의 경우 Amazon S3에 어떻게 업로드해야합니까?
감사합니다, Dharam 특별히 지시하지 않는 한 항상 요청 및 응답 개체를 스트림 HttpClient를