我正在开发一个允许用户通过点击按钮下载文件的应用程序。点击一个按钮,我进行了ajax调用,并调用了一个弹簧控制器。在那个弹簧控制器里面我写了一个函数如下:
@RequestMapping(value="/downloadFile", method=RequestMethod.GET)
public @ResponseBody String dowloadPDF(final HttpSession session, final HttpServletResponse response,@RequestParam(value="param1", required=true)final String param1,@RequestParam(value="param2",required=true)final String param2,@RequestParam(value="param3", required=true)final String param3,@RequestParam(value="fileName",required=true)final String fileNameRecieved){
final String fileName = fileNameRecieved.trim();
final String requestedFile = getPath(param1,param2,param3,fileName);
try{
File pdfFile= new File(requestedFile);
final InputStream inputStream = new FileInputStream(pdfFile);
response.setContentType("application/pdf");
response.setHeader("Content-Disposition","attachment;filename="+fileName);
IOUtils.copy(inputStream, response.getOutputStream());
response.flushBuffer();
inputStream.close();
}catch(Exception exception){
System.out.println("stckTrace : "+exception.getStackTrace());
exception.printStackTrace();
}
return "success";
}
点击按钮时写的ajax调用如下所示。
$.ajax({
url : "downloadFile",
method : "GET",
dataType: "json",
contentType: 'application/pdf',
'Transfer-Encoding': 'chunked',
sync:true,
data:{
"param1" :param1,
"param2":param2,
"param3" :param3,
"fileName": fileName
},
success : function(response) {
alert(response);
},
error : function(e) {
alert('Error: ' + e.getAllResponseHeaders());
}
});
问题是我的控制器被调用并执行而没有给出任何异常。但是没有下载文件,而且我在ajax调用的响应中收到错误
"Server: Apache-Coyote/1.1
Content-Disposition: attachment;filename=GATE-CS 2004.pdf
Content-Type: application/pdf
Transfer-Encoding: chunked
Date: Thu, 05 Feb 2015 16:33:22 GMT
"
任何人都可以帮我解决这个问题,我也改变了ajax调用中的内容类型,但它仍无效。
答案 0 :(得分:0)
一个问题似乎与dataType
来电中的contentType
和ajax
有关。
我认为你已经在ajax调用中交换了它们的值。根据你的问题描述,它们的值应该是。
dataType:'application/pdf','Transfer-Encoding': 'chunked'
contentType : "json"//but you don't need to use it,because you are not sending the json data