본문 바로가기
개발/안드로이드

[Android] 이어받기 기능이 적용된 File Downloader

by darksilber 2011. 12. 9.
반응형
출처 - 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) + '-');  
반응형

댓글