Загрузка файла с HTTP-соединения, которое перенаправляет на HTTPS-соединение - PullRequest
1 голос
/ 09 января 2012

Я использую Dropbox в своем проекте, чтобы получить крошечный URL из Dropbox, который похож на http://www.db.tt/xyzabc.

Когда я пытаюсь загрузить файл в HTC My touch, мой код работает нормально, но если я пытаюсь в Motorola Atrix, он выдает exception unknown host db.tt.

На самом деле сначала у меня есть URL-адрес, подобный http://www.db.tt/xyzabc, который является URL-адресом HTTP. Я открываю его, а затем получаю exception, и в исключительных случаях я получаю фактический URL-адрес файла, который содержит файл и является URL-адресом HTTPS в исключительном случае. Я начинаю скачивать файл, вот мой код, который работает для меня:

public static void fileUrl(String fAddress, String localFileName,
        String destinationDir) {
    OutputStream outStream = null;
    URLConnection uCon = null;

    InputStream is = null;
    try {
        URL url;
        byte[] buf;
        int ByteRead, ByteWritten = 0;
        url = new URL(fAddress);
        outStream = new BufferedOutputStream(new FileOutputStream(
                destinationDir + localFileName));

        try {
            // Here i have "http://www.db.tt/xyzabc"
                       // after i hit url i get exception and in exception that
                       // FileNotFoundException at https://www.dropbox.com/abcxyz
                     // i get actual actual url i parse that exception and 
                     //retrive https://www.dropbox.com/xyzabc(actual url)
                      // but in motorolla atrix instead of that url i get
                     // unknownhost exception "db.tt"




            uCon = url.openConnection();   
        //  uCon.connect();

            is = uCon.getInputStream();
        } catch (Exception e) {
            url = new URL(e.getMessage().substring(
                    e.getMessage().indexOf("https"),
                    e.getMessage().length()));
            outStream = new BufferedOutputStream(new FileOutputStream(
                    destinationDir + localFileName));

            uCon = url.openConnection();
            is = uCon.getInputStream();
        }

        buf = new byte[size];
        while ((ByteRead = is.read(buf)) != -1) {
            outStream.write(buf, 0, ByteRead);
            ByteWritten += ByteRead;
        }
        System.out.println("Downloaded Successfully.");
        System.out.println("File name:\"" + localFileName
                + "\"\nNo ofbytes :" + ByteWritten);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
            outStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Ответы [ 2 ]

1 голос
/ 12 февраля 2013

Этот ответ работает - до определенной степени. У меня есть похожее решение здесь

Все еще существует проблема с короткими гиперссылками Dropbox на Atrix. Они перенаправляют с http на https, но НЕ на нужный файл, вместо этого я получаю много html из Dropbox.

1 голос
/ 10 января 2012

хорошо, после нескольких попыток, я сделал это, решил сам, и вот решение будет полезным, если у кого-то возникла такая же проблема, он требует некоторой обработки ошибок и модификации в соответствии с потребностями

После просмотра иерархии классов Connection, которую я нашелчто HttpsURLConnection является дочерним по отношению к HttpURLConnection, а HttpURLConnection является дочерним по отношению к UrlConnection, поэтому я использовал HTTPConnection вместо UrlConnection, а HttpsUrlConnection является конкретным для HttpsUrlConnection, он решил мою проблему, и я продолжаю повторять, пока не получу URL Https после перенаправления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...