我有一个图片文件,我正在转换为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();
}
}
当我点击下载链接时,它打开了下载窗口,即使在那个窗口文件名正确无误,但是如果我将该文件保存到磁盘并尝试打开它不能打开,则它不会打开文件任何人帮助我?
答案 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)
以下是与您的要求类似的示例。它从数据库中读取图像,浏览器可以下载它。