大文件不能用jsp下载

时间:2016-01-28 09:23:43

标签: java jsp

我正在从JSP内的script发送一个AJAX POST请求。

内部控制器我从该位置读取文件并返回字节数组。

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。我该怎么办?

1 个答案:

答案 0 :(得分:0)

我可能错了,但我建议检查是否没有缓存问题,因为超时应该触发错误回调。

您应该在请求中添加aparameter cache : false,,或者更好的恕我直言,您可以阻止缓存所有进一步的Ajax调用regardless of which jQuery method you use(ajax, get...)

$.ajaxSetup({ cache: false });