Здравствуйте я использую этот XAgent с этим SSJS кода для потоковой передачи файла из файловой системы сервера:ServletOutputStream поток ошибок динамической памяти большой файл
var filepath="c:/test/file.pdf" //380MB of file
var extContext:javax.faces.context.ExternalContext = facesContext.getExternalContext();
var response:com.ibm.xsp.webapp.XspHttpServletResponse = extContext.getResponse();
var writer:javax.servlet.ServletOutputStream = response.getOutputStream();
[email protected](filepath,3).toLowerCase();
[email protected](filepath,"/");
contentype="application/octet-stream";
contentype=(estensione=="pdf")?"application/pdf":contentype;
response.setContentType(contentype); // content type of data, for other binary see mime types or put "application/octet-stream"
response.setHeader("Cache-Control", "no-cache");
var filestream:java.io.File = new java.io.File(filepath); //for check file size
var maxfilesize:long=20*1024*1024;
var typestream= filestream.length()>maxfilesize?"attachment;":"inline;";
response.setHeader("Content-Disposition" ,typestream+" filename=\"" + fileName+"\""); //31/12/2015 required if You need to pass it back as file
response.setHeader("Content-Length", ""+filestream.length());
var inStream:java.io.FileInputStream = new java.io.FileInputStream(filepath);
var btbuffer:byte= new byte[32767];
var ilen,bytesBuffered:int=0;
while ((ilen=inStream.read(btbuffer))!=-1){
writer.write(btbuffer,0,ilen)
writer.flush(); //31/12/2015 - flush writer but don't work
}
inStream.close();
writer.close();
facesContext.responseComplete();
Кодекса работы correctly..but, когда у нас есть 2 или больше загрузить в то же время, сервер show HTTP JVM: java.lang.OutOfMemoryError:, потому что у меня 1024M NOTES.INI настройка.
Действительно проблема ServletOutputStream, которая использует общий размер файла в памяти javaheap и освобождает его после завершения загрузки или отмены загрузки клиента. У кого-то есть идея, как исправить? Я прочел это question и this question без каких-либо успехов.
ОБНОВЛЕНИЕ 4 января 2016
Я решить проблему с этой строки кода после задания ответа:
response.disableXspCache(false);
ложный параметр является обязательным!
Наконец я слишком удалить код writer.close()
Спасибо Sven this blog и замечанию Riand Philippe
Спасибо, Филипп Рианд ..., когда я использую функцию disableXspCache(), mycode работает неправильно. –
Итак, если вы не вписываетесь в память, увеличьте размер кучи с помощью настроек notes.ini. Используйте 64-битный домино, чтобы избежать ограничения 2G. –
Я решаю проблему! см. сообщение UPDATE –