2013-04-21 95 views
0

从Servlet中将BLOB存储在数据库中?我正在尝试使用JSP/Servlet/EJB(用于JPA)编写简单的webapp将文件(最多50 MB)上传到数据库。我如何使用JPA

在我的实体类(用户)我有以下代码:

@Lob 
private byte[]    file; 

这是我如何在Servlet的检索文件(实际上它保存在我的电脑上的文件,我想改变它):

for (Part part : request.getParts()) { 
     InputStream is = request.getPart(part.getName()).getInputStream(); 
     int i = is.available(); 
     byte[] b = new byte[i]; 
     is.read(b); 
     String fileName = getFileName(part); 
     FileOutputStream os = new FileOutputStream("C:/files/" + fileName); 
     os.write(b); 
     is.close(); 
} 

我不知道如何写字节数组(使用循环)到我的用户实体。有任何想法吗 ?

回答

2

您的输入流处理不正确 - available方法不会返回整个流的长度,它只会给您在流被阻止之前可读取的(估计)量。强调估计。您需要循环读取整个流,直到读取调用结果为-1,或使用Apache Commons IO中的IOUtils等实用程序。

final byte[] data = IOUtils.toByteArray(inputStream); 

一旦你的数据,只需将其设置为你的实体:

entity.setFile(data); 

并保存它。