2015-03-30 5 views
1

я не могу загрузить файл в следующей ссылке: http://avisloyalty.eu/assets/fleetlarge//VW_Passat_15.jpgИзображения частично скачивание,

только часть файла загружается.

Следующий мой код. Пожалуйста, дайте мне знать, если я что-то сделаю неправильно.

URLConnection urlConn = new URL("http://avisloyalty.eu/assets/fleetlarge//VW_Passat_15.jpg").openConnection(); 
InputStream is = urlConn.getInputStream(); 
FileOutputStream fos = new FileOutputStream(file.getPath()); 

byte[] buffer = new byte[4096]; 
int len; 

while((len = is.read(buffer)) > 0) 
{ 
    fos.write(buffer, 0, len); 
} 
fos.close(); 
+0

Попробуйте изменить «> 0» в цикле while на! = -1. Это может быть чтение большого количества массивов нулевой длины, но на самом деле еще не закончено (вы получаете -1, когда поток закончился). Я всегда предпочитаю использовать что-то вроде HttpClient, чтобы делать такие вещи (поскольку он обрабатывает такие вещи, как перенаправления и т. Д.), Возможно, посмотрите на эту тему ... http://stackoverflow.com/questions/10960409/how-do-i-save -a-file-downloaded-with-httpclient-in-a-specific-folder – BretC

+0

Pshemo да, я сожалею, что не смог указать его в коде. –

+0

Брет благодарит за предложение, но это не сработало. Я проверю вопрос, которым вы поделились. среднее время, если бы вы могли найти что-то еще, пожалуйста, дайте мне знать. Большое спасибо –

ответ

1

Я просто попытался это ...

HttpClient client = HttpClientBuilder.create().build(); 
    HttpGet get = new HttpGet("http://avisloyalty.eu/assets/fleetlarge//VW_Passat_15.jpg"); 

    HttpResponse execution = client.execute(get); 
    HttpEntity entity = execution.getEntity(); 
    FileOutputStream outputStream = new FileOutputStream("C:\\tmp\\imgout.jpg"); 

    if (entity != null) { 
     InputStream inputStream = entity.getContent(); 
     IOUtils.copy(inputStream, outputStream); 
    } 

    outputStream.close(); 

... и выходной файл содержит текст ...

<HTML> 
<HEAD> 
<TITLE>avisloyalty.eu</TITLE> 
<META NAME="robots" CONTENT="noindex"> 
</HEAD> 
<FRAMESET FRAMESPACING="0" BORDER="0" FRAMEBORDER=No ROWS="100%,*"> 
    <FRAME SRC="https://www.avisloyalty.eu/assets/fleetlarge//VW_Passat_15.jpg"> 
</FRAMESET> 
<NOFRAMES> 
Sorry, your browser doesn't seem to support frames! <br> 
Proceed to <A href="https://www.avisloyalty.eu/assets/fleetlarge//VW_Passat_15.jpg">https://www.avisloyalty.eu/assets/fleetlarge//VW_Passat_15.jpg</A> manually. 
</NOFRAMES> 
</HTML> 

Так что, вероятно, ничего плохого с кодом (I 'd по-прежнему использовать! = -1 вместо> 0 хотя)! Возможно, вам нужно установить заголовок запроса или что-то еще ...

+0

О, я никогда не открываю его. Умный вы это сделали. На самом деле я не уверен, какой заголовок изменится, и как это сделать. В любом случае, как вы предположили, я собираюсь использовать HttpClient, надеюсь, что это сработает. –

+0

@ Shan-mobile Я подозреваю, что вы действительно хотите загрузить HTTPS >> «https://www.avisloyalty.eu/assets/fleetlarge//VW_Passat_15.jpg», но когда я пытаюсь это сделать, я получаю нагрузку на ошибки сертификата - вы можете посмотреть http://stackoverflow.com/questions/1828775/how-to-handle-invalid-ssl-certificates-with-apache-httpclient – BretC

+0

Да, именно я работал над той же проблемой. Просто попробуйте поставить свой сертификат в ssl-keystore. В любом случае, спасибо за помощь. Надеюсь, я смогу справиться. –

Смежные вопросы