2013-04-21 56 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); 

並保存它。