no data after downloading blob pdf file
1)我想下载一个pdf文件,它以blob的形式存储在oracle数据库中。但是我得到0 kb的文件。
我以前没有做过。所以请帮忙
单击按钮时,一个servlet会调用另一个完成下载工作的servlet。
这是我编写的用于下载文件的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | protected void processRequest(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=UTF-8"); try { OutputStream outStream = resp.getOutputStream(); List file=(List)request.getAttribute("file"); String fileName=null; byte[] fileBytes=null; for (int i=0;i<file.size();i++) { Map objec=(Map) file.get(i); fileName=(String)objec.get("fileName"); fileBytes=(byte[])objec.get("fileBytes"); } String fileType = fileName.substring(fileName.indexOf(".")+1,fileName.length()); if (fileType.trim().equalsIgnoreCase("pdf")) { resp.setContentType("application/pdf" ); } resp.setHeader("Content-Disposition","attachment; filename=\""+fileName+"\""); resp.setHeader("cache-control","must-revalidate"); System.out.println(fileBytes); } finally { // out.close(); } } ServletOutputStream outs = response.getOutputStream(); outs.write(fileBytes); outs.flush(); outs.close(); |
请告诉我哪里出了问题我该如何下载包含数据的完整pdf文件?
2)可以说这个pdf文件是客户详细信息的完整报告。假设它有300页。对于每个客户,页面号都是已知的。例如,客户Antony在此pdf中的页面编号是4和5。我只希望下载包含这2页的文件。我如何完成此任务?
更新:
jtahlborn解决了我的第一个非常愚蠢的问题...只需要添加以下几行
1 2 3 | resp.getOutputStream().write(fileBytes); resp.getOutputStream().flush(); resp.getOutputStream().close(); |
所以我终于成功了。现在请某人帮我解决第二个问题。我想下载pdf中没有页面编号的页面并将其另存为单独的pdf文件。其实多数民众赞成在PDF我要下载。不是第一个pdf。我只是这样做是为了学习下载blob文件。
1)您正在打印字节,而不是将它们放入响应中。 例如
2)您可能需要某种pdf解析/编辑库,以使您可以拆分pdf文件。 或者,您可以使用一些独立的pdf编辑器将pdf预先分成每个客户文件,并将它们分别存储在数据库中。