2015-03-21 6 views
2

Я пытаюсь вывести файлы PDF, которые у меня есть на локальную файловую систему сервера domino, используя инструкции со страниц Стива Висселя. http://www.wissel.net/blog/d6plinks/shwl-7mgfbnXpages SSJS - Вывод файлов медленный для больших файлов

Файл загружается, но для файлов, находящихся в диапазоне 20 МБ, требуется несколько минут. Есть ли способ ускорить потоковое вещание?

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false"> 

    <xp:this.beforeRenderResponse><![CDATA[#{javascript://importPackage(java.io.File); 
var exCon = facesContext.getExternalContext(); 
var response = exCon.getResponse(); 
var out = response.getOutputStream(); 

if (out==null) { 
    print("The freakn' stream isn't there"); 
} else { 
    print("All good with the stream"); 
} 

try { 
    /* 
    * Move all your existing code here... 
    */ 
    print("setting headers"); 
    response.setContentType("application/octet-stream"); 
    response.setHeader("Content-Disposition","attachment;filename=ebook.pdf"); 
    response.setHeader("Cache-Control", "no-cache"); 

    var file:java.io.File = new java.io.File("C:\\Autotrader\\r-gswob.pdf"); 

    if (file.exists()) { 
     print("File Exists"); 
    } else { 
     print("file missing"); 
    } 
    var fileIn:java.io.FileInputStream = new java.io.BufferedInputStream(new java.io.FileInputStream(file)); 
    var c:int; 
    while ((c = fileIn.read()) != -1) { 
      out.write(c); 
    } 

} catch (e) { 
    print("Error generating dynamic PDF: " + e.toString()); 
} finally { 
    if (fileIn != null) { 
      fileIn.close(); 
    } 
    if (out != null) { 
      out.close(); 
    } 
    facesContext.responseComplete(); 
} 


}]]></xp:this.beforeRenderResponse></xp:view> 

ответ

2

Используйте больший буфер, чем просто один INT значение для копирования файла:

var buffer = new byte[10000]; 
var len; 
while ((len = fileIn.read(buffer)) != -1) { 
     out.write(buffer, 0, len); 
} 

Это ускорит скачать много.

+0

, в то время как ответ был намного быстрее, файл не читается, тогда как исходный код обеспечивает рабочий файл. очень странно. Рабочий размер файла составляет 18,423kb, а новый - 18,428kb –

+0

weeeee. Это сделал трюк. mucho оценили –