байт [] для изображения для загрузки - PullRequest
1 голос
/ 30 декабря 2011

У меня есть один файл изображения, который я преобразовываю в byte[] и сохраняю его в базе данных, пока пользователь щелкает ссылку на файл из пользовательского интерфейса, чтобы загрузить файл, чтобы загрузить, я написал один метод

public void downloadDeclarationForm(HttpServletRequest request, 
                                      HttpServletResponse response) throws IOException {
    int payrollId = RequestUtils.getBrowsePayroll(request);
    Payroll payroll = itConfigManager.getObjectOrNull(Payroll.class, payrollId);
    int year = payrollManager.getYear(payroll.getFromDate());
    int id = NumberUtils.toInt(request.getParameter("id"));
    try {
        byte[] byteBuf = itConfigManager.getDeclarationFormBytes(id, year);
        ControllerUtils.writeFileUploadHeaders(response, 
                                 itConfigManager.getFileName(id, year), byteBuf.length);
        //response.setContentType("image/jpeg");
        OutputStream stream = new ByteArrayOutputStream();

        response.getOutputStream().write(byteBuf);
        response.getOutputStream().flush();
        response.getOutputStream().close();
    } catch (Exception e) {
        e.printStackTrace();
        response.getOutputStream().print(
                "Error while fetching attachment..");
    } finally {
        response.getOutputStream().close();

    }

}

Когда я нажимаю на ссылку для загрузки, открывается окно загрузки, даже если в этом окне имя файла отображается с правильным расширением, но файл не открывается, если я сохраняю этот файл на диск и пытаюсь открыть его, но не открывается. кто-нибудь мне помочь?

Ответы [ 3 ]

2 голосов
/ 30 декабря 2011

setContentType должен быть незакомментирован, а параметр должен быть правильным.Например, type это 'gif', это должно быть response.setContentType("image/gif");.Вы должны убедиться, что у вас установлен правильный тип изображения.

Если вы не уверены, какой тип файла вы получаете, вы можете использовать класс ImageIO.Вот обсуждение относительно ImageIO. Как использовать ImageIO для получения типа изображения и байтового массива изображения

2 голосов
/ 30 декабря 2011

Необходимо установить заголовок ответа - Content-Type, Conent-Length и Content-Disposition.

Например,

 response.setContentType("application octet-stream");
 response.setHeader("Content-Length",String.valueOf(byteBuf.length));
 response.setHeader("Content-Disposition", "attachment; filename=sample.png");
0 голосов
/ 30 декабря 2011

Вот пример, аналогичный вашему требованию. Он считывает изображение из базы данных, и браузер может загрузить его.

http://www.roseindia.net/jsp/downloadimage.shtml

...