IT_Programming/Android_Java

이어받기 기능이 적용된 File Downloader

JJun ™ 2014. 5. 10. 21:23

출처 - 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) + '-');