2

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

谁能帮帮我吗?

4

2 回答 2

11

假设您知道文件的mimeTypefilename,您可以设置内容类型和 HTTP 标头 Content-Disposition。

只需将字节数组写入OutputStream

    // The response from your servlet.
    HttpServletResponse resp;
    resp.setContentType(mimeType);
    resp.setHeader("Content-Disposition", "attachment;filename=" + filename);
    resp.getOutputStream().write(byteArray);
于 2012-12-21T11:49:39.220 回答
1

字节数组可以从 servlet 发送到客户端。您可以在此处和其他地方找到有关该主题的许多讨论。

以下是讨论流式传输效率的人(使用代码)。这是关于如何将 servlet 映射到 url的讨论(带有示例)。

您要做的最后一件事就是在用户单击按钮时将其链接到 servlet 的 URL。

在流式传输字节数组之前,您还需要查看可以在标头中提供哪些附加信息。例如,如果您提供一个 mime 类型,那么浏览器就会知道如何处理该文件;在浏览器中打开 PDF,在浏览器中显示图像;在 Excel 中打开 xls 文件。

于 2012-12-21T11:58:00.957 回答