Изображения, хранящиеся на HTTPS-сервере, как их получить? - PullRequest
0 голосов
/ 08 апреля 2011

Ниже приведен пример кода, который я использую для доступа к образцу файла jpg, но после подключения я не вижу длины файла и файла, загруженного на SD-карту!. (Не является accessign HTTP-соединение и HTTPS-соединение одно и то же?)

Вот пример кода, который я использую. url = "https://calomel.org/calomel_footer.jpg"

private Bitmap getImageBitmap(String url) {
    Bitmap bm = null;
    try {
        URL aURL = new URL(url);
        URLConnection conn = aURL.openConnection();
        Log.i("My_App", "Content Type = "+URLConnection.guessContentTypeFromName(url));
        conn.connect();
        Log.i("My_App", "Content Length = "+conn.getContentLength());
        Log.i("My_App", "Content Type = "+conn.getContentType());
        FileOutputStream fos = new FileOutputStream(new File("/mnt/sdcard/calomel_footer.jpg"));
        InputStream is = conn.getInputStream();
        byte buf[]=new byte[1024];
        int len;
        while((len=is.read(buf))>0) {
            fos.write(buf,0,len);
        }
        fos.close();
        BufferedInputStream bis = new BufferedInputStream(is);
        bm = BitmapFactory.decodeStream(bis);
        bis.close();
        is.close();

   } catch (Exception e) {
       Log.e("My_App", "Error getting bitmap", e);
   }
   return bm;
}

и длина отображается как -1, а тип содержимого 2 - как ноль.

Также, когда я вижу, что мой файл хранится в папке "/mnt/sdcard/calomel_footer.jpg", я вижу файл 0 байт.

Может кто-нибудь помочь мне с решением?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

Во-первых, изображение в https://calomel.org/calomel_footer.jpg не загружается для меня.Я вижу сообщение о том, что [изображение «https://calomel.org/calomel_footer.jpg” не может быть отображено, поскольку оно содержит ошибки.].

Во-вторых, вы получаете входной поток с веб-сервера и записываете его через выходной поток файла.,После этого вы пытаетесь снова прочитать тот же поток ввода того же веб-сервера (что вы делаете через BitmapFactory).Эти потоки хороши только один раз.То, что вы хотите сделать, это что-то вроде:

while((len=is.read(buf))>0) {
        fos.write(buf,0,len);
    }
    fos.close();
    FileInputStream fis = new FileInputStream(myFile); // myFile is the File that you wrote the FileOutputStream to.
    BufferedInputStream bis = new BufferedInputStream(fis);
    bm = BitmapFactory.decodeStream(bis);
0 голосов
/ 08 апреля 2011

Ноль от getContentType(), потому что веб-сервер не предоставил подходящий заголовок. -1 из getContentLength() вызвано тем, что веб-сервер снова не предоставил подходящий заголовок и отправляет его в кодировке чанка.

В этих обстоятельствах длину можно определить только путем загрузки файла и просмотра количества полученных байтов.

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