无法在新标签页中打开pdf文件

时间:2018-06-19 10:54:08

标签: javascript java json spring pdf

我有一个要求,在 html页面中,如果用户点击按钮,则调用javascript函数,在该函数中,ajax调用将从服务器获取pdf文件的内容。

请在下面找到其他控制器

@RequestMapping(value = UriMapping.GET_PDF_PATH, method = RequestMethod.POST)
public @ResponseBody WebServiceResponse getPdfPath(HttpServletRequest req,
  @RequestParam String fileName, HttpServletResponse response) {
WebServiceResponse res = new WebServiceResponse();
FileInputStream fis = null;
try {
  if(!CommonUtil.isBlank(fileName)) {
    String filePath = FieldConstant.PDF_PATH + fileName;

    File f = new File(filePath);
    response.setContentType("application/pdf");
    response.setHeader("Content-disposition", "inline;filename=" + f.getName() );
    fis = new FileInputStream(f);
    DataOutputStream os = new DataOutputStream(response.getOutputStream());
    response.setHeader("Content-Length", String.valueOf(f.length()));
    byte[] buffer = new byte[1024];
    int len = 0;
    while ((len = fis.read(buffer)) >= 0) {
      os.write(buffer, 0, len);
    }
    fis.close();
  } else {
    res.setSucess(false);
    res.setReturnMessage("Something Went Wrong While opening file path !");
  }

} catch (Exception e) {
  LOGGER.error(e.toString());
  res.setSucess(false);
  res.setReturnMessage("Something Went Wrong While opening file path !");
}
LOGGER.info("Response" + res.toString());
return res;

}

FieldConstant.PDF_PATH是所有pdf文件所在的服务器的固定路径。

下面是客户端jquery函数,其中我使用window.open()函数在新选项卡中打开pdf。

function test(count){
var fileName = pdfGlobal[count].name;
if(fileName != undefined && fileName != "") {
    var param = {
            "fileName" :fileName
    }
    $.ajax({
        url : '../content/getPdfPath',          
        type : 'post',
        dataType : "json",
        data : param,
        error : function(error,jqXHR, exception) {
            errorMessage(exception);
        },
        success : function(data) {              
            if (data) {
                window.open(data,'_blank');
            } else{
                errorMessage(data.returnMessage);
            }
        }
    });
}
}

我正在解析下面的错误

enter image description here

现在,因为错误提示我在响应的第一位找到了%!

enter image description here

请帮助我...我知道这不是一个大问题,但我对出了什么问题感到困惑。根本无法找到根本原因......

提前致谢。

1 个答案:

答案 0 :(得分:2)

ajax期望返回一个JSON,不需要您使用ajax,您可以使用window.open,通过get发送文件名

window.open('../content/getPdfPath?fileName='+fileName,'_blank');

所以您必须将控制器更改为

@RequestMapping(value = UriMapping.GET_PDF_PATH, method = RequestMethod.GET)