【问题标题】:no data after downloading blob pdf file下载 blob pdf 文件后没有数据
【发布时间】:2012-03-13 21:41:15
【问题描述】:

1)我想下载一个作为 blob 存储在 oracle 数据库中的 pdf 文件。但我得到 0 kb 文件。 我以前没有这样做过。所以请帮忙 在按钮上单击一个 servlet 调用另一个 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 文件是客户详细信息的完整报告。假设它有 300 页。并且每个客户的页码都是已知的。例如客户安东尼,他在此 pdf 中的第 4 页和第 5 页。我只想下载包含这 2 个页面的文件。我怎样才能完成这项任务?

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

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

所以我终于成功了。现在请一些人帮助我解决我的第二个问题。我想下载从 pdf 中知道页码的页面并保存为单独的 pdf 文件。其实这就是我要下载的pdf。不是第一个pdf。我这样做是为了学习下载 blob 文件。

【问题讨论】:

  • 将您的第二个问题作为一个单独的问题提出。 Stack Overflow 是一个提供问题答案的平台。但是识别正确答案的唯一方法是每个线程都有一个问题。

标签: java oracle servlets blob


【解决方案1】:

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

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

【讨论】:

  • 对不起..我忘了添加剩余的代码.... ServletOutputStream outs = response.getOutputStream(); outs.write(fileBytes); outs.flush(); outs.close();
  • 我已经编辑了主题并添加了我正在打印文件的行..请检查..
  • 哦,是的 jtahlborn 先生......第一个问题已经解决......非常感谢......现在我担心第二个问题
猜你喜欢
  • 2023-03-21
  • 2021-11-19
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 2017-03-29
  • 2021-07-02
相关资源
最近更新 更多