简体   繁体   中英

How to download file in Android over HTTPs

I am downloading a file in android which goes via plain HTTP. Now i want this connection to go over HTTPs and then download file, can someone help me in code what changes will i need to do that.

I changed

URLConnection ucon = url.openConnection();

to

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

but that didn't work.

Code:

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);
            }

        }

Try this:

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();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM