使用JPA绑定的java文件类型管理

使用JPA绑定的java文件类型管理,java,jsf,jpa-2.0,Java,Jsf,Jpa 2.0,我有一个以字节[]形式链接到对象的文件。该文件存储在数据库中的Blob列类型中,绑定由@Lob注释进行 问题是这个系统没有管理文件类型(即:我上传了一个pdf,但当下载它时,它没有任何类型) 你能给我一个简单的方法来处理这类问题吗 我的第一个想法是将类型存储在一个简单的varchar列中,但是我将如何更改byte[]getter上的流的类型呢?我假设您成功地将文件持久化到数据库中。为了下载它并了解类型,您必须在HttpSessionResponse对象中提供内容类型 在JSF中,您可以这样做:

我有一个以字节[]形式链接到对象的文件。该文件存储在数据库中的
Blob列类型中,绑定由
@Lob
注释进行

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

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


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

我假设您成功地将文件持久化到数据库中。为了下载它并了解类型,您必须在
HttpSessionResponse
对象中提供
内容类型

在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

如果要上载不同类型的文件,最好将上载文档的确切类型存储在数据库中的某个位置。然后,对于您拥有的每种文档类型,您都可以找到相应的
内容类型
(也称为
MIME类型
互联网媒体类型


这是一个所有
MIME类型的列表

对于在lob内容中为mimeType使用单独字段,您的看法如何正确。因此,您可以在上载过程中推断mimetype a并将其存储到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 + "\"");