将Excel报告保存到java中的客户端选定目录

将Excel报告保存到java中的客户端选定目录,java,servlets,Java,Servlets,使用ApachePOI,我可以下载文件作为报告。但它保存在D目录中。因为,我在代码中硬编码了D目录。 下面的代码段用于存储报告 public static synchronized String writeToExcelReportGeneration(HttpServletRequest request,HttpServletResponse response){ try{ FileOutputStream out = new FileO

使用ApachePOI,我可以下载文件作为报告。但它保存在D目录中。因为,我在代码中硬编码了D目录。 下面的代码段用于存储报告

public static synchronized String writeToExcelReportGeneration(HttpServletRequest request,HttpServletResponse response){
        try{
                    FileOutputStream out = new FileOutputStream(new File("D:\\excelFormat.xslx"));
                    workBook.write(out);
                    out.close();

                }
    }
这是我的AJAX调用

    $.ajax({
     url : "${path}/user/customer/scriptTimeCompareReportGenerate",
        type : "POST",
        dataType : "text",
        data : {export_type:exp_Drp_Id,
        script_id:scriptChkId,
        created_timestamp:timeStamp},
        success : function(response){
            if (response.length>0){
                if (response == "Excel"){
                    alert("Reports are exported to excel successfully");
                } else if (response == "PDF"){
                    alert("Reports are exported to PDF successfully");
                }
                } else 
                    alert("Failed to Export");
                }
                });

我的问题是,在报表保存到D目录之前,它必须提示文件应该保存在哪里。就像enctype=“多部分/表单数据”一样。。需要您的宝贵建议,请

对我来说,您的客户机-服务器体系结构似乎不合适。因为您使用的是与客户机和服务器相同的机器,所以您感觉它正在被下载,但实际上您的代码正在服务器的“D-Drive”中生成文件。要在客户端下载文件,您需要做的是: 1) 在服务器端生成文件。
2) 然后,您只需提供指向该文件的链接,就可以从客户端下载该文件。

在客户端,您无法生成该文件。因此,您需要做的是,在ajax调用之后,调用writeToExcelReportGeneration()方法,该方法将生成excel文件。现在,在响应中附加文件并将其发送到客户端

response.setContentType("application/vnd.ms-excel");
     response.setHeader("Content-Disposition","attachment;filename=file.xlsx");
FileInputStream in = 
            new FileInputStream(new File("file.xlsx"));
ServletOutputStream out = response.getOutputStream();
byte[] outputByte = new byte[4096];
while(in.read(outputByte, 0, 4096) != -1){
            out.write(outputByte, 0, 4096);
        }
        in.close();
        out.flush();
        out.close();
或 将文件夹作为公用文件夹,并在ajax成功后执行另一个ajax调用:

success : function(response){
 $.ajax({
     url : "/path/to/file.xlsx",
});
}

Shruthi,你能告诉我,你想在ajax调用之前还是在ajax调用之后生成文件…??参见其他注释Hi,尝试过。但我得到的回应是字符串。如果您有任何样品(Spring MVC),请联系我们。让我知道@ShubhasmitTry第二种方法会更简单。