byte []到图像下载

时间:2011-12-30 04:35:19

标签: java image spring download bytearray

我有一个图片文件,我正在转换为byte[]并将其保存在数据库中,同时用户点击文件链接从UI文件必须下载下载我已经写了一个方法

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 个答案:

答案 0 :(得分:2)

您必须设置响应标头 - Content-Type,Content-Length和Content-Disposition。

例如,

 response.setContentType("application octet-stream");
 response.setHeader("Content-Length",String.valueOf(byteBuf.length));
 response.setHeader("Content-Disposition", "attachment; filename=sample.png");

答案 1 :(得分:2)

setContentType应该取消注释,参数应该是正确的。例如,类型是'gif',它应该是response.setContentType("image/gif");。您需要确保在那里设置了正确的图像类型。

如果您不确定要获得的文件类型,可以使用ImageIO类。以下是有关ImageIO的讨论。 How to use ImageIO to get image type and image byte array

答案 2 :(得分:0)

以下是与您的要求类似的示例。它从数据库中读取图像,浏览器可以下载它。

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