Мы запускаем приложение 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' не работает для файлов большего размера, что дает нам следующее исключение:
Заранее спасибо!!