загрузить изображение, но размер изображения неверен в котлине

Я обнаружил удивительную проблему при загрузке изображения.

URL изображения http://www.xbiquge.la/files/article/image/50/50353/50353s.jpg

Я могу открыть и сохранить его в хроме. Но когда я загружаю его по коду, он не работает.

Я не могу открыть его через просмотрщик изображений.

Примечание. Размер неправильного изображения меньше размера правильного файла изображения. И другое изображение другого веб-сайта допустимо.

Я не знаю, что случилось. Пожалуйста, помогите, заранее спасибо

Ниже приведен мой код

val imgUrl = "http://www.xbiquge.la/files/article/image/50/50353/50353s.jpg"
val conn = URL(imgUrl).openConnection()
val bytes = conn.getInputStream().readBytes()
File("D:\\test.jpg").writeBytes(bytes)

Я также пытаюсь использовать java для загрузки изображения. Это также сбой...

URL url = new URL("http://www.xbiquge.la/files/article/image/50/50353/50353s.jpg");
URLConnection connection=url.openConnection();
InputStream inputStream = connection.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File("d:\\download.jpg")));
int c;
byte[] temp = new byte[1024 * 2];
while ((c = bufferedInputStream.read(temp)) != -1) {
    bufferedOutputStream.write(temp,0,c);
}
bufferedOutputStream.close();
inputStream.close();

person stars-one    schedule 13.02.2020    source источник
comment
Похоже, он загружает не фактическое изображение, а html сайта, с которого он пытается загрузить. Не уверен насчет kotlin, но должен быть какой-то эквивалент разрешения перенаправления, который вы должны проверить.   -  person Macindows    schedule 13.02.2020
comment
Может быть, вы правы. Но я не знаю, что делать дальше. И я пытаюсь использовать java. Но это тоже сбой @ Macindows   -  person stars-one    schedule 13.02.2020


Ответы (2)


Похоже, что здесь дан ответ на вопрос: Kotlin: Как сохранить изображение из Интернета во внутреннюю память

Я думаю, вам нужно указать формат и тип сжатия того, как вы хотите сохранить изображение.

person Quadrivics    schedule 13.02.2020
comment
спасибо за ваш ответ, но я запускаю код kotlin на ПК, а не на Android. И я думаю, что причина не в том, что вы говорите. Потому что с помощью этого кода можно успешно загрузить другое интернет-изображение. - person stars-one; 13.02.2020

Я нашел правильное решение. Причина в том, что это файл gzip. Для его загрузки необходимо использовать следующий код.

val openConnection = URL(url).openConnection()
//if the image file is gzip
val bytes = if (openConnection.contentEncoding == "gzip") {
    GZIPInputStream(openConnection.getInputStream()).readBytes()
} else {
    openConnection.getInputStream().readBytes()
}
val file = File("e:\\text.jpg")
file.writeBytes(bytes)
person stars-one    schedule 24.02.2020