нет данных после загрузки BLOB-файла PDF - PullRequest
0 голосов
/ 23 февраля 2012

1) Я хочу скачать pdf-файл, который хранится в oracle db в виде большого двоичного объекта. Но я получаю файл 0 кб. Я не делал этого раньше. Так пожалуйста помогите при нажатии кнопки сервлет вызывает другой сервлет, который выполняет загрузку. Это код, который я написал, чтобы загрузить файл.

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 страниц. и для каждого клиента номер страницы известен. Например, для клиента Энтони его страница № 4 в этом формате PDF. Я хочу загрузить файл только с этими 2 страницами. Как я могу выполнить эту задачу?

UPDATE: jtahlborn решил мою первую проблему, которая была очень глупой ... просто пришлось добавить следующие строки

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

Так что, наконец, мне это удалось. Теперь, пожалуйста, помогите мне решить мою вторую проблему. Я хочу скачать страницы, номера страниц которых не известны из PDF-файла, и сохранить их в отдельном PDF-файле. На самом деле вот PDF я хочу скачать. Не первый pdf. Я просто сделал это, чтобы научиться загружать файлы BLOB-объектов.

1 Ответ

3 голосов
/ 23 февраля 2012

1) Вы распечатываете байты, а не помещаете их в ответ.например, resp.getOutputStream().write(fileBytes);

2) вам, вероятно, понадобится какая-то библиотека для разбора / редактирования pdf, которая позволит вам разбирать файл pdf.в качестве альтернативы, вы можете использовать какой-нибудь автономный редактор PDF, чтобы заранее разделить PDF на файлы для каждого клиента и сохранить их отдельно в БД.

...