2013-09-10 4 views
1

Существует код сервлета для загрузки файла excel/zip с производственного сервера на локальный компьютер. Когда я нажимаю кнопку «Сохранить» или «Открыть» на рабочем сервере, он генерирует исключение ClientAbortException. Тот же код хорошо работает в Dev и UAT. Также эта ошибка появляется не всегда. Ниже приведено код для того же -Облицовка ClientAbortException

 response.setContentType("application/download"); 
     response.setHeader("Content-Disposition", "attachment; filename= \""+ fileName +"\""); 
     fin = new FileInputStream(f); 
     int size = fin.available(); 
     response.setContentLength(size); 
     byte[] ab = new byte[size]; 

     os = response.getOutputStream(); 

     int bytesread; 

     do{ 
      bytesread = fin.read(ab,0,size); 
      if(bytesread >-1) { 
       os.write(ab,0,bytesread); 
      } 
     } while(bytesread >-1); 
     os.flush(); 
     os.close(); 
+0

Возможно, вам будет полезно разместить соответствующую часть вашего stacktrace. –

ответ

0

Вы можете быть запущены прервало устройство HTML брандмауэра, который является то, что будет существовать в среде прода, но не тестовые среды.

Кроме того, ваш код не будет масштабироваться очень хорошо. Что произойдет с вашим сервером, если 500 пользователей попытаются одновременно загрузить 50 МБ-файл?

Вы можете построить масштабируемую цикл, как это:

byte[] buffer = new byte[bufferSize]; 
int bytesRead = input.read(buffer); 
while (bytesRead > 0) { 
    output.write(buffer, 0, bytesRead); 
    bytesRead = input.read(buffer); 
} 

Выберите подходящий BufferSize, скажем 20480 или около того.

+0

Спасибо Стив. увидит, работает ли он на prod. Есть ли что-то, что может вызвать это? Как браузерная версия совместимости? Потому что при попытке сохранить или открыть excel (когда не удается, то есть в 50% случаев) Превосходство искажается. Также на производстве только один конечный пользователь использует отчеты excel. – user2738714

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