我环顾四周并尝试了一些我看到的解决方案,但似乎没有任何效果。所以这是我的情况:我有一个 PDF 文件作为 BLOB 存储在我的 oracle 数据库中。在我的后端,我调用我的服务以下载该 pdf(在我的实体中,pdf 是 a byte[]),如下所示:@GET@Path("/downloadpdf")@Produces("application/pdf")public HttpServletResponse downloadPdf(@Context HttpServletRequest request, @Context HttpServletResponse response) { try { UserGuideJpaService userGuideService = new UserGuideJpaServiceImpl(); HashMap<String, Object> result = userGuideService.getPdfGuide(); if ("0".equals(result.get("returnCode"))) { UserGuide userGuide = (userGuide) result.get("userGuide"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-control", "private"); response.setDateHeader("Expires", 0); response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment; filename=\"APP - User Guide.pdf\""); byte[] pdf = userGuide.getPdf(); if (pdf != null) { response.setContentLength(pdf.length); ServletOutputStream out = response.getOutputStream(); out.write(pdf); out.flush(); out.close(); } } } catch (Exception e) { e.printStackTrace(); } return response;}回到我的前端,我有这个:注意:这就是我的response.data样子(它是一个字符串):%PDF-1.4 %8 0 obj << /Type /Page /Resources << /ProcSet [ /PDF /Text ] /Font 4 0 R /Shading 6 0 R /ExtGState 7 0 R/MediaBox [0 0 595.28 864.00] /Contents 9 0 R /Parent 10 0 R >> endobj但是,这不会下载文件,甚至不会打开它。而且我很确定 pdf 在后端是正确的,因为我在使用时设法得到它: OutputStream out = new FileOutputStream("Test.pdf"); out.write(pdf); out.close();我怎样才能从我的浏览器下载 pdf 格式?或者至少打开它?
1 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
默认情况下,ajax 请求将您的响应视为文本,这会导致非文本文件出现问题。
为了防止这种情况在您的请求中添加一个二进制 responseType,例如
({
downloadPdf: function() {
return $http({
method: 'GET',
url: this.baseUrl + "/downloadpdf",
responseType: "blob"
});
}
});
添加回答
举报
0/150
提交
取消