출처 - http://regularmotion.kr/263
아래 코드를 이용하여 이어받기가 적용된 파일 다운로더를 만들 수 있습니다.
Java와 Android 기반 Program에 적용하실 수 있습니다.
1. RandomAccessFile을 만들어서 원하는 위치부터 writing 할 수 있도록 준비를 하고.
2. 원하는 URL로 connection을 생성.
3. Header에 Range 정보를 추가
conn.setRequestProperty("Range", "bytes=" + offset + '-');
4. 다운로드 시작이 부분이 이어받기를 위한 부분이다.
static final int DOWNLOAD_DONE = 0 ; static final int DEFAULT_TIMEOUT = 30000 ; long fileSize, remains, lenghtOfFile = 0 ; mUrl = args[ 1 ]; File file = new File( 'path' ); if (file.exists() == false ) { file.createNewFile(); } RandomAccessFile output = new RandomAccessFile(file.getAbsolutePath(), "rw" ); fileSize = output.length(); output.seek(fileSize); URL url = new URL(mUrl); URLConnection conn = url.openConnection(); conn.setRequestProperty( "Range" , "bytes=" + String.valueOf(fileSize) + '-' ); conn.connect(); conn.setConnectTimeout(DEFAULT_TIMEOUT); conn.setReadTimeout(DEFAULT_TIMEOUT); remains = conn.getContentLength(); lenghtOfFile = remains + fileSize; if ((remains <= DOWNLOAD_DONE) || (remains == fileSize)) { return null ; } InputStream input = conn.getInputStream(); byte data[] = new byte [ 1024 ]; int count = 0 ; if (fileSize < lenghtOfFile) { while ((count = input.read(data)) != - 1 ) { output.write(data, 0 , count); } } output.close(); input.close(); |
현재 파일 사이즈(fileSize)를 얻어온 다음, 이 부분부터 전송해달라고 헤더에 추가하는
부분!!
conn.setRequestProperty( "Range" , "bytes=" + String.valueOf(fileSize) + '-' ); |
'IT_Programming > Android_Java' 카테고리의 다른 글
[Android] Way to avoid using 'notifyDataSetChanged' when only one or two items are changed at Adapter. (0) | 2014.05.16 |
---|---|
[펌] Android apk 내 대용량 파일 처리 방법(SQLite DB 등) (0) | 2014.05.10 |
A Comparison of java.net.URLConnection and HTTPClient (0) | 2014.05.10 |
[Android] WebView에서 <a> 태그의 "_blank" target 처리하기. (0) | 2014.05.07 |
[펌] Android application 설치 완료 Broadcast 받기 (0) | 2014.05.06 |