2015-01-09 3 views
0

Spring3.2.9.RELEASE, Jetty9.2.4 или Jetty8.1.16соединение с сервером Jetty 9 принудительно закрыто удаленным узлом

кода Скачать файл

@RequestMapping(value = "/file", method = RequestMethod.GET) 
public void file(@RequestParam("id") String path, HttpServletResponse response) throws IOException { 

FileEntity file = attachService.getAttachFileByPath(path); 
OutputStream out = new BufferedOutputStream(response.getOutputStream()); 
try { 
response.reset(); 
response.setContentType("application/octet-stream; charset=utf-8"); 
response.setContentLength(file.getFileBytes().length); 
response.addHeader("Content-disposition", "attachment; filename=" + file.getFileName()); 
response.addHeader("Cache-Control", "no-cache"); 
out.write(file.getFileBytes()); 
out.flush(); 
out.close(); 
} finally { 
if (out != null) { 
out.close(); 
} 
} 
} 

Затем я использую ниже код и ту же ошибку.

HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); 
headers.setContentDispositionFormData("attachment", file.getFileName()); 
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file.getFileBytes()), headers, HttpStatus.CREATED); 

Код для загрузки файла обозревателя Android можно завершить нормально, но затем я нашел ошибку в файле журнала.

org.eclipse.jetty.io.EofException: null 
    at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:192) ~[na:na] 
    at org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:441) ~[na:na] 
    at org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:399) ~[na:na] 
    at org.eclipse.jetty.io.SelectChannelEndPoint.onSelected(SelectChannelEndPoint.java:111) ~[na:na] 
    at org.eclipse.jetty.io.SelectorManager$ManagedSelector.processKey(SelectorManager.java:636) ~[na:na] 
    at org.eclipse.jetty.io.SelectorManager$ManagedSelector.select(SelectorManager.java:607) ~[na:na] 
    at org.eclipse.jetty.io.SelectorManager$ManagedSelector.run(SelectorManager.java:545) ~[na:na] 
    at org.eclipse.jetty.util.thread.NonBlockingThread.run(NonBlockingThread.java:52) ~[na:na] 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:620) ~[na:na] 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:540) ~[na:na] 
    at java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_71] 
Caused by: java.io.IOException: An existing connection was forcibly closed by the remote host 
    at sun.nio.ch.SocketDispatcher.write0(Native Method) ~[na:1.7.0_71] 
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51) ~[na:1.7.0_71] 
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[na:1.7.0_71] 
    at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[na:1.7.0_71] 
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:487) ~[na:1.7.0_71] 
    at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:170) ~[na:na] 
    ... 10 common frames omitted 

, пожалуйста, как исправить ошибку, затем загрузить файлы.

ответ

0

Независимо от того, какой веб-клиент, который вы используете для подключения к Jetty, закрыл свое соединение с Jetty, прежде чем Jetty смог закончить запись своих данных ответа клиенту. Вот сведения об исключениях, которые вы видите.

Вы заявили, что этот клиент находится на устройстве Android.

Имейте в виду, что:

  • Мобильные сети не считаются надежными.
  • Устройства, которые переключают сети (например, с мобильного на Wi-Fi), будут разорвать его активные соединения.
  • Если вы переместитесь от башни к башне в мобильной сети, активные соединения также могут быть отключены.
  • Поставщики мобильной сети имеют агрессивные прозрачные прокси, которые часто усугубляют подобные проблемы.
Смежные вопросы