2014-07-23 2 views
0

일반 HTTP를 통해 전송되는 Android 용 파일을 다운로드 중입니다. 이제이 연결이 HTTPS를 거쳐 파일을 다운로드하도록하고 싶습니다. 누군가 코드에서 변경 작업을 수행하면 도움이 필요합니까? HTTP를 통해 Android에 파일을 다운로드하는 방법

나는

//HttpsURLConnection ucon = (HttpsURLConnection) url.openConnection(); 

URLConnection ucon = url.openConnection(); 

을 변경하지만, 작동하지 않았다.

코드 :

private void DownloadFile() { 

      try { 
       File root = android.os.Environment 
         .getExternalStorageDirectory(); 

       File dir = new File(root.getAbsolutePath() + "/File"); 
       if (dir.exists() == false) { 
        dir.mkdirs(); 
       } 

       URL url = new URL(DownloadFile); // you can write here any link 
       File file = new File(dir, fileName); 

       long startTime = System.currentTimeMillis(); 
       Log.d(LOG_TAG, "download begining"); 
       Log.d(LOG_TAG, "download url:" + url); 
       Log.d(LOG_TAG, "downloaded file name:" + fileName); 

       /* Open a connection to that URL. */ 
       URLConnection ucon = url.openConnection(); 
       //HttpsURLConnection ucon = (HttpsURLConnection) url.openConnection(); 

       /* 
       * Define InputStreams to read from the URLConnection. 
       */ 
       InputStream is = ucon.getInputStream(); 
       BufferedInputStream bis = new BufferedInputStream(is); 

       /* 
       * Read bytes to the Buffer until there is nothing more to 
       * read(-1). 
       */ 
       ByteArrayBuffer baf = new ByteArrayBuffer(5000); 
       int current = 0; 
       while ((current = bis.read()) != -1) { 
        baf.append((byte) current); 
       } 

       /* Convert the Bytes read to a String. */ 
       FileOutputStream fos = new FileOutputStream(file); 
       fos.write(baf.toByteArray()); 
       fos.flush(); 
       fos.close(); 
       Log.d(LOG_TAG, 
         "download ready in" 
           + ((System.currentTimeMillis() - startTime)/1000) 
           + " sec"); 

      } catch (IOException e) { 
       Log.d(LOG_TAG, "Error: " + e); 
      } 

     } 
+0

가능한 중복 [안드로이드에서 HTTPS를 통해 파일을 다운로드하는 방법] (https://stackoverflow.com/questions/24884268/how- to-download-file-over-https-in-android)을 사용합니다. 한 번만 질문해야합니다. – jww

답변

0

이 시도 :

URL url = new URL("some url"); 

//create the new connection 
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

//set up some things on the connection 
urlConnection.setRequestMethod("GET"); 
urlConnection.setDoOutput(true); 

//and connect! 
urlConnection.connect(); 

//set the path where we want to save the file 
//in this case, going to save it on the root directory of the 
//sd card. 
File SDCardRoot = new File("/sdcard/"+"Some Folder Name/"); 

//create a new file, specifying the path, and the filename 
//which we want to save the file as. 
File file = new File(SDCardRoot,"some file name"); 

//this will be used to write the downloaded data into the file we created 
FileOutputStream fileOutput = new FileOutputStream(file); 

//this will be used in reading the data from the internet 
InputStream inputStream = urlConnection.getInputStream(); 

//this is the total size of the file 
int totalSize = urlConnection.getContentLength(); 

//variable to store total downloaded bytes 
int downloadedSize = 0; 

//create a buffer... 
byte[] buffer = new byte[1024]; 

int bufferLength = 0; //used to store a temporary size of the buffer 

//now, read through the input buffer and write the contents to the file 
while ((bufferLength = inputStream.read(buffer)) > 0) 
{ 
    //add the data in the buffer to the file in the file output stream (the file on the sd card 
    fileOutput.write(buffer, 0, bufferLength); 

    //add up the size so we know how much is downloaded 
    downloadedSize += bufferLength; 

    int progress=(int)(downloadedSize*100/totalSize); 

    //this is where you would do something to report the prgress, like this maybe 
    //updateProgress(downloadedSize, totalSize); 
} 

//close the output stream when done 
fileOutput.close(); 
관련 문제