我有一个包含blob内容的表,其中我存储了不同的文件类型(text, audio, image, etc)
。成功检索byte []
后,我不知道如何转换[],以便将其转换为下载对话框。
这是我的代码
trns = session.beginTransaction();
Query query = session.createQuery("from FileDownload as fu where fu.Id =:Id");
query.setInteger("Id", id);
FileDownload fileDownload = (FileDownload) query.iterate().next();
byte[] byteArray = fileDownload.getFile();
以上代码运行正常,我收到byte []
。但我不知道如何进一步将其转换为出现对话框的文件。
有人可以帮助我吗?
答案 0 :(得分:10)
假设您知道文件的mimeType
和filename
,则可以设置内容类型和HTTP标头内容配置。
只需将字节数组写入OutputStream
:
// The response from your servlet.
HttpServletResponse resp;
resp.setContentType(mimeType);
resp.setHeader("Content-Disposition", "attachment;filename=" + filename);
resp.getOutputStream().write(byteArray);
答案 1 :(得分:1)
字节数组可以从servlet发送到客户端。您可以在此处和其他地方找到关于该主题的许多讨论。
以下是讨论efficiency of streaming(带代码)的人。 以下是关于如何map the servlet to a url(带示例)的讨论。
您要做的最后一件事就是在用户点击按钮时将用户链接到servlet的URL。
您还需要在流式传输字节数组之前查看标题中可以提供的其他信息。例如,如果您提供mime类型,则浏览器会知道如何处理该文件;在浏览器中打开PDF,在浏览器中显示图像;在Excel中打开xls文件。