Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ajax和spring控制器处理浏览器文件下载_Java_Ajax_Spring Mvc_Browser_Download - Fatal编程技术网

Java 使用ajax和spring控制器处理浏览器文件下载

Java 使用ajax和spring控制器处理浏览器文件下载,java,ajax,spring-mvc,browser,download,Java,Ajax,Spring Mvc,Browser,Download,在一个项目中,我需要将一些参数从ajax POST传递给spring控制器,spring控制器将参数传递回java服务,java服务在服务器上的给定位置生成一个文件,并将文件路径返回给控制器。post控制器将路径重定向到GET控制器。现在,GET控制器应该允许浏览器下载该文件 对我来说,一切都很好,除了最后一步,即GET spring控制器在浏览器中按预期生成响应,但没有弹出用于文件下载的浏览器下载窗口。请有人帮帮我。我已经挣扎了72小时 第一步(ajax请求)工作正常: function e

在一个项目中,我需要将一些参数从ajax POST传递给spring控制器,spring控制器将参数传递回java服务,java服务在服务器上的给定位置生成一个文件,并将文件路径返回给控制器。post控制器将路径重定向到GET控制器。现在,GET控制器应该允许浏览器下载该文件

对我来说,一切都很好,除了最后一步,即GET spring控制器在浏览器中按预期生成响应,但没有弹出用于文件下载的浏览器下载窗口。请有人帮帮我。我已经挣扎了72小时

第一步(ajax请求)工作正常:

 function exportData(criteria) {

    return $http({
        method: 'POST',
        url: 'export/PDF',
        data: criteria,
        headers: {'Accept': 'application/pdf'}

});
    } 
@RequestMapping(value = "export/PDF", method = RequestMethod.POST)
  public final String getDataToExportPDF(Model model, @RequestBody String    toJsonCriteria,
        final RedirectAttributes ra) throws Exception {

    try {

        AuditInput ai = auditService.formatDataToExport(toJsonCriteria);
        List<AuditData> ad = auditService.dataToExport(ai);
        logger.info("inside pdf export Post method ");
        String path = auditPdfService.createPDFFile(ai, ad);
        logger.info("inside export Post method");
        logger.info("inside pdf export Post method path: " + path);
        ra.addFlashAttribute("path", path);
        return "redirect:/download.html"; 

    } catch (Exception e) {
        logger.error("inside export/PDF POST catch");           
        throw new IndiciumException("error creating audit PDF file");
    }

}   
第二步(后控制器)工作正常:

 function exportData(criteria) {

    return $http({
        method: 'POST',
        url: 'export/PDF',
        data: criteria,
        headers: {'Accept': 'application/pdf'}

});
    } 
@RequestMapping(value = "export/PDF", method = RequestMethod.POST)
  public final String getDataToExportPDF(Model model, @RequestBody String    toJsonCriteria,
        final RedirectAttributes ra) throws Exception {

    try {

        AuditInput ai = auditService.formatDataToExport(toJsonCriteria);
        List<AuditData> ad = auditService.dataToExport(ai);
        logger.info("inside pdf export Post method ");
        String path = auditPdfService.createPDFFile(ai, ad);
        logger.info("inside export Post method");
        logger.info("inside pdf export Post method path: " + path);
        ra.addFlashAttribute("path", path);
        return "redirect:/download.html"; 

    } catch (Exception e) {
        logger.error("inside export/PDF POST catch");           
        throw new IndiciumException("error creating audit PDF file");
    }

}   

尝试替换下面的行

response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename = " + downloadFile.getName()); 
response.setHeader("X-Frame-Options", "ALLOWALL");
与:

我用“addHeader”替换了“setHeader”,并在文件名中添加了额外的双引号,为我工作


希望这将对您有所帮助。

方法“downloadFile()”是否给出任何错误?不,它是成功的。在firebug中,我可以看到所需的响应,但没有下载文件的提示。但是,我尝试将'products=“application/pdf”'添加到@RequestMapping中,但它抛出错误“not Acceptable 406”。您是说文件下载时没有提示吗?没有。。该文件根本不下载,但响应会写入浏览器,正如我在控制台中看到的那样。据我所知,ajax无法用于下载该文件。.使用submit insteadit在进行您指定的更改后仍会以相同的方式运行。请帮助:(请尝试直接向downloadFile方法发出请求,而不是ajax请求,然后它必须工作。在这种情况下,当我们希望在生成文件之前从前端获得输入值时,如何避免使用ajax。您能提出建议吗?尝试在downloadFile方法内调用getDataToExportPDF方法。