【问题标题】:Download dynamic file using Java Servlet [duplicate]使用Java Servlet下载动态文件[重复]
【发布时间】:2017-09-09 09:27:47
【问题描述】:

我正在尝试使用 ajax 和 servlet 下载文件,但我得到的最大结果是成功获得文件 parseado

我有这部分 servlet:

else if(type.equals("downloadDocument")){
            String file = request.getParameter("filePath");
            File f = new File(file);

            if (f.exists() && f.isFile()){
             OutputStream out = response.getOutputStream();
             FileInputStream in = new FileInputStream(f);
             byte[] buffer = new byte[4096];
             int length;
             while ((length = in.read(buffer)) > -1){
                 out.write(buffer, 0, length);
             }
             in.close();
             out.flush();
            }

还有那个电话:

    $.ajax({
        type : "POST",
        url : "./ServletDocuWindow?downloadDocument",
        data : datos,
        success : function(r) {

        }
    });

【问题讨论】:

  • 不可能通过 AJAX。 This 可能会回答你的问题!
  • @ShahzadIftikhar 是的。这并不容易,也不是所有浏览器都支持的,但是使用文件系统 API 和其他类似的 API,您可以做到。例如,mega.co.nz does it
  • 不使用ajax?最后我需要的是下载我从服务器获取的文件
  • 所以如果我理解正确的话,有一些链接并且在用户点击时,您不想刷新页面而是立即开始下载。您希望这样做吗?
  • 下载文件的最简单方法是提供对文件 URL 的直接链接。您可能必须在 web.xml 中添加文件扩展名,以便 servlet 不会调用您的 doPost 方法,而是立即继续下载。

标签: javascript java servlets jakarta-ee


【解决方案1】:

按照@dsp_user 的建议,我使用 a 调用了 servlet,它运行良好

var doc = document.getElementById("windowDocumentId").value;
        var index = $("#lvDocuments").data("kendoListView").select().index();


        var link = document.createElement("a");
        link.download = $("#lvDocuments").data("kendoListView").dataSource.view()[index].itemText;
        link.href = "./ServletDocuWindow?" + doc + "," +$("#lvDocuments").data("kendoListView").dataSource.view()[index].itemText;
        link.click();

【讨论】:

    【解决方案2】:

    我没有从 AJAX 下载文件,而是在新的单独窗口中传递请求。然后,我的 servlet 被调用,文件被下载到我的本地。此外,当文件开始下载时,新窗口会关闭

    我猜你需要添加以下代码,你应该很高兴。

        response.setContentType("application/octet-stream");
        response.setContentLength((int) downloadFile.length());
    
        // set headers for the response
        String headerKey = "Content-Disposition";
        String headerValue = String.format("attachment; filename=\"%s\"", AppUtility.getConvertedString(fileName)); //to ensure that there are no space in the file name
        response.setHeader(headerKey, headerValue);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 2023-03-21
      • 2020-04-02
      • 2021-04-25
      • 2011-08-06
      • 1970-01-01
      相关资源
      最近更新 更多