如何使用下载对话框将byte []转换为文件?

时间:2012-12-21 11:22:29

标签: java spring spring-mvc

我有一个包含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 []。但我不知道如何进一步将其转换为出现对话框的文件。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:10)

假设您知道文件的mimeTypefilename,则可以设置内容类型和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文件。