2014-07-23 30 views
0

我正在通過普通HTTP下載Android中的文件。現在我想要這個連接通過HTTPs然後下載文件,有人可以幫助我在代碼中我需要做什麼更改。如何在Android上通過HTTP下載文件

我改變

URLConnection ucon = url.openConnection(); 

//HttpsURLConnection ucon = (HttpsURLConnection) 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

可能重複[如何在Android的下載文件通過HTTPS(https://stackoverflow.com/questions/24884268/how-對下載的文件過HTTPS功能於機器人)。你應該只問一次問題。 – 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(); 
相關問題