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文件。
答案 0 :(得分:3)
1)您正在打印字节而不是将它们放在响应中。例如resp.getOutputStream().write(fileBytes);
2)您可能需要某种pdf解析/编辑库,它允许您拆分pdf文件。或者,您可以使用一些独立的pdf编辑器预先将pdf分成每个客户文件,并将它们单独存储在数据库中。