0

我有一个文件作为字节 [] 链接到一个对象。该文件存储在 DB 中的 a 中Blob column type,并通过@Lob注解进行绑定。

问题是这个系统不管理文件类型(即:我上传了一个 pdf,但是当下载它时,它没有任何类型)

你能给我一个简单的方法来处理这类问题吗?

我的第一个想法是将类型存储在一个简单的varchar column但我将如何更改 byte[] getter 上的流类型?

4

2 回答 2

0

我假设您成功地将文件保存在数据库中。为了下载它并知道类型,您必须content-typeHttpSessionResponse对象内提供。

JSF中,您可以这样做:

FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
response.reset();
response.setContentType(contentType);
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");

之后,您必须将流传递给响应的OutputStream.

如果您要上传不同类型的文件,最好将上传文档的确切类型存储在数据库中的某个位置。然后,对于您拥有的每种文档类型,您可以找到对应的content-type(也称为MIME-typeinternet-media-type)。

是所有的列表MIME-types

于 2013-07-19T09:59:44.313 回答
0

恕我直言,您对 lob 内容使用单独的 mimeType 字段是正确的。因此,您可以在上传期间推断 mimetype 将其存储到您的 jpa 实体中。

在您的下载 servlet 中,您可以编写如下内容:

String mimetype = entity.getMimeType();

// sets response content type
if (mimetype == null) {
    mimetype = "application/octet-stream";
}
response.setContentType(mimetype);
response.setContentLength((int)file.length());
String fileName = (new File(filePath)).getName();

// sets HTTP header
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
于 2013-07-19T10:04:31.870 回答