티스토리 뷰

728x90


Dropbox API 등록하기 참고자료
      http://thdev.net/40


Dropbox API 사용 Upload
      http://thdev.net/21


Dropbox API 사용 Metadata 
      http://thdev.net/23


이번에는 Dropbox 파일 다운로드를 위한 api를 사용해보겠습니다.


- DOWNLOAD
Android java code

-- 다운로드를 호출 하기 위한 소스코드(dropbox API 아님)
void download() {
        new Thread() {
            public void run() {
                //다운로드를 위한 실제 파일 경로를 만들게 됩니다.
                //다운 받을 파일이 b.txt라면 로컬에 가상의 파일을 미리 생성해야 합니다.
                //(생성하지 안으면 파일 인아우풋 스트림시에도 다운로드가 진행 되지 않더군요.)
                File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "/download/b.txt");
                try {
                    //downloadDropboxFile 함수를 호출 합니다.
                    //api 상의 코드가 이상해서 실제 api를 바로 호출 할 순 없습니다. 그래서 별도의 함수를 생성하게 되었습니다.
                    //코드상의 함수를 생성하고 실제 api를 호출 하게 됩니다.
                    downloadDropboxFile("dropbox", "/test/b.txt", file);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }.start();
    }

--api를 호출 하기 위한 버퍼스트림 함수를 생성합니다. 여기서 실제 api를 호출 하게 됩니다.

public boolean downloadDropboxFile(String root, String dbPath, File localFile) throws IOException {
        Log.d("TA", "down : "+dbPath);
        BufferedInputStream br = null;
        BufferedOutputStream bw = null;

        try {
            //필요할 경우 사용합니다.
            /*if(!localFile.exists()) {
                localFile.createNewFile();
            }
            */
            Log.d("TA", localFile.toString());
            //FileDownload 클래스를 생성합니다.(dropbox api에 정의되어 있는 FileDownload 클래스입니다.)
            //getFileStream(dropbox또는 sandbox를 사용합니다, 다운 받을 dropbox상의 경로를 작성합니다., 다운 받아 저장할 경로이지만 null을 주면 됩니다.)
            FileDownload fd = api.getFileStream(root, dbPath, null);
            //버퍼드 Input 스트림을 생성합니다.
            br = new BufferedInputStream(fd.is);
            //버퍼드 output 스트림을 생성합니다. 다운 받을 실제 경로를 fileoutput스트림으로 호출 합니다.
            bw = new BufferedOutputStream(new FileOutputStream(localFile));

            byte[] buffer = new byte[4096];
            int read;
            while (true) {
            read = br.read(buffer);
            if (read <= 0) {
            break;
            }
            bw.write(buffer, 0, read);
            }
            //sd카드를 리스캔합니다.
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE));
        } finally {
            //in finally block:
            if (bw != null) {
                bw.close();
            }
            if (br != null) {
                br.close();
            }
        }

        return true;
    }

이상으로 다운로드를 위한 코드를 작성했습니다.
실제 api를 사용해서 다시 테스트 해봐야 알겠지만 여기선 파일 다운을 위해서 BufferedInputStream 과 OutputStream을 새롭게 생성하게 되었습니다.
api 상에 정의는 되어 있지만 실제로 돌아가지 않았던걸로 알고 있습니다.
추후에 API를 다시 확인 하여 사용 가능한지 체크해보겠습니다.!!^^;





댓글