下载blob pdf文件后没有数据

时间:2012-02-23 13:14:51

标签: java oracle servlets blob

1)我想下载一个pdf文件,该文件作为blob存储在oracle db中。但我得到0 kb文件。 我之前没有这样做过。所以请帮助 在按钮上单击一个servlet调用另一个执行下载工作的servlet。 这是我写下载文件的代码。

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文件是客户详细信息的完整报告.lets假设它有300页。并且对于每个客户,页面号都是已知的。前客户Antony他的页面在这个pdf中没有4和5.我只想用这2页下载文件。我怎么能完成这个任务?

更新: jtahlborn解决了我的第一个非常愚蠢的问题...只需添加以下行

resp.getOutputStream().write(fileBytes);
resp.getOutputStream().flush();
resp.getOutputStream().close();

所以我终于成功了。现在请帮助我解决第二个问题。我想从pdf下载页面中没有的页面,并另存为单独的pdf文件。实际上这就是我要下载的pdf。不是第一个pdf。我这样做是为了学习下载blob文件。

1 个答案:

答案 0 :(得分:3)

1)您正在打印字节而不是将它们放在响应中。例如resp.getOutputStream().write(fileBytes);

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