Ошибка при загрузке больших файлов с помощью Grails 1.3.7 с использованием java.net.UrlConnection и outputstream

Мы запускаем приложение Grails 1.3.7 в среде Tomcat 1.6. Несколько дней назад некоторые из наших отчетов в формате PDF начали вызывать проблемы. Отчеты меньшего размера, размером около 1 МБ или меньше, работают, но большие выдают исключение java.net.SocketException: Broken pipe.

Для создания отчетов в формате PDF мы используем itext-2.1.0. Затем мы используем java.net.URLConnection, чтобы пользователь мог загрузить сгенерированный файл. Код следующий:

// retrives file generated using itext
   def thisUrl = new File(session.getServletContext().getRealPath("/reports  /${pdffilename}")).toURI().toURL();

   def connection = null
   def pdfInputStream = null  

   try {
      connection = thisUrl.openConnection() //returns a java.net.UrlConnection
      pdfInputStream = connection.inputStream

          if (connection && pdfInputStream) {
                    connection.connectTimeout = 25* 60*1000;
                    connection.readTimeout = 25* 60*1000
                    response.setHeader "Content-disposition", "attachment; filename = ${pdffilename}"
                    response.contentType = 'pdf/pdf'
                    response.outputStream << pdfInputStream     // This line fails for large files
          } else {
                    redirect(action: 'failHandler')
         }
  } catch (e) {
         log.info('Could not report, connection may have terminated')
         throw e;
  } finally {
     response.outputStream.flush()
      response.outputStream.close()
  }

'Response.outputStream ‹< pdfInputStream' не работает для файлов большего размера, что дает нам следующее исключение:

исключение выходного потока

Заранее спасибо!!


person dipess    schedule 27.11.2012    source источник
comment
У меня были проблемы, когда каталог, который tomcat использовал для кеширования файла, был недоступен для записи или не имел места, и это давало мне странные ошибки каждый раз, когда файл был достаточно большим, чтобы tomcat попытался попасть на файловый сервер.   -  person Jeff Beck    schedule 27.11.2012


Ответы (1)


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

person taari    schedule 29.11.2012