2016-01-28 59 views
0

我在JSP內發送來自script的AJAX POST請求。大文件不能用jsp下載

內部控制器我正在從位置讀取文件並返回字節數組。

fileInputStreamReader = new FileInputStream(file); 
     byte[] bytes = new byte[(int) file.length()]; 
     fileInputStreamReader.read(bytes); 

     filedata = Base64.getEncoder().encode(bytes); 
     response.setHeader("Content-Disposition", "attachment; filename=" + fileName); 
     response.setContentLength((int) file.length()); 
     fileInputStreamReader.close(); 

然後在前端我創造一個不可見的鏈接並下載文件。

$.ajax({ 
    url : url, 
    type : 'POST', 
    data : nodedata, 
    beforeSend : function(jqXHR, settings) { 
     setCsrfHeader(jqXHR); 
    }, 
    success : function(data) { 
     hideLoader(); 
     /* window.open("data:"+contentType+";base64, " + data); */ 
     var uri = 'data:'+contentType+';base64,' + data; 
     var downloadLink = document.createElement("a"); 
     downloadLink.href = uri; 
     downloadLink.download =atcName ; 

     document.body.appendChild(downloadLink); 
     downloadLink.click(); 
     $("#Success").html("File download successful"); 
     $("#error").hide(); 
     $("#Success").show(); 
     document.body.removeChild(downloadLink); 
    }, 
    error : function(e) { 
     hideLoader(); 
     $("#error").html(ERROR_SERVER_RESPONSE); 
     $("#Success").hide(); 
     $("#error").show(); 
     alert(ERROR_SERVER_RESPONSE); 
    } 
}); 

問題是隻有大文件大小大於50mb。我該怎麼辦?

+2

「我該怎麼辦?」:發佈確切的錯誤消息。 – Henry

+0

@亨利:正如我所說,當我檢查元素時,大文件也被轉移。但不作爲附件下載。任何地方都沒有錯誤消息。響應也是空的,但響應狀態爲200 OK – Shadab

+0

您使用的是什麼服務器?如果上傳時間過長,則可能會有文件大小限制或超時。 – StephaneM

回答

0

我可能是錯的,但我建議檢查是否沒有緩存問題,因爲超時應引發錯誤回調。

您應該在您的請求中添加參數cache : false,,或者更好的恕我直言,您可以阻止所有進一步的Ajax呼叫被緩存,regardless of which jQuery method you use(ajax, get...)

$.ajaxSetup({ cache: false });