【问题标题】:Download a file after processing ajax request处理ajax请求后下载文件
【发布时间】:2013-04-08 16:09:11
【问题描述】:

我正在根据 ajax 请求创建一个工作簿对象(excel 对象“org.apache.poi.ss.usermodel.Workbook”)。

我怎样才能把这个文件从servlet发送到浏览器,让浏览器弹出一个下载框。

【问题讨论】:

    标签: java spring excel model-view-controller


    【解决方案1】:

    您必须将 Content-Type 设置为 application/x-msdownload 并将 Header 设置为 Content-Disposition

    例如:

        String fileName = URLDecoder.decode("MyBook.xlsx", "ISO8859_1");//Change if required
        response.setContentType("application/x-msdownload");            
        response.setHeader("Content-disposition", "attachment; filename="+ fileName);
    //And just write output stream here
    

    由于您更改了响应标头,因此浏览器将自动显示弹出消息以下载文件。

    【讨论】:

    • 我没有文件位置..它是动态生成的。并且无处保存。
    • 如果您没有物理文件,那么只需将您动态生成的内容写入 out.write 并为具有有效扩展名的 fileName 指定任何值。例如字符串文件名="MyContent.xlsx"
    • jsp中要做什么..?目前我正在创建一个modelAndView并发布它..
    • 您的问题是您正在调用 servlet,因为您应该只从那里推送文件。
    • }).done(function(data) { alert(data);} 目前我只是提醒接收到的数据。开始下载的更改应该是什么。'
    【解决方案2】:

    经过大量谷歌搜索后,我知道使用 ajax 请求很难。

    所以我决定使用隐藏形式。 在 javascript 中,我创建了一个隐藏表单并提交了表单所以我得到了 excel 下载弹出窗口。

    我的 javascript 如下所示。

        var form = document.createElement("form"); //created dummy form for submitting.
        var element1 = document.createElement("input"); 
        form.method = "POST";
        form.action = "/my/servlet/path";
    
        element1.value=values; //its a json string I need to pass to server.
        element1.name="data";
        element1.type = 'hidden'
        form.appendChild(element1);
    
        document.body.appendChild(form);
    
        form.submit();
    

    【讨论】:

      猜你喜欢
      • 2014-01-16
      • 1970-01-01
      • 2018-06-25
      相关资源
      最近更新 更多