关于Java:下载Blob pdf文件后无数据

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)您正在打印字节,而不是将它们放入响应中。 例如 resp.getOutputStream().write(fileBytes);

2)您可能需要某种pdf解析/编辑库,以使您可以拆分pdf文件。 或者,您可以使用一些独立的pdf编辑器将pdf预先分成每个客户文件,并将它们分别存储在数据库中。