我試圖使用hibernate,jsf和mysql將.doc
,.pdf
,.txt
和圖像文件保存到我的數據庫中。如何使用java將doc,pdf和圖像文件保存到mysql數據庫?
我已經創建了一個列來保存BLOB類型的文件。如果我正在保存.txt
類型,則會正確保存文件。
如果我想保存任何其他格式的文件,那麼我得到一個異常。 在我的豆中,我創建了一個字段名稱:byte[] file;
我如何正確保存而沒有任何異常?我是否需要爲mysql列更改數據類型或爲java類使用不同的字段?
(響應BalusC)
這是我使用的文件寫入的代碼。我正在使用fileInputStream
,然後使用hibernate框架保存文件。
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
} else {
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
byte[] fileInBytes=item.get();
try {
File uploadedFile = new File("/home/db/webApp", fileName);
uploadedFile.createNewFile();
FileInputStream fileInputStream = new FileInputStream(uploadedFile);
//convert file into array of bytes
fileInputStream.read(fileInBytes);
fileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
UploadedFile object= new UploadedFile();
object.setFile(fileInBytes);
uploadedObject.setFileName(fileName);
session.save(object);
UploadedFile
是JSF管理的bean:
public class UploadedFile{
private String fileName;
private byte[] file;
/**
* @return the fileName
*/
public String getFileName() {
return fileName;
}
/**
* @param fileName the fileName to set
*/
public void setFileName(String fileName) {
this.fileName = fileName;
}
/**
* @return the file
*/
public byte[] getFile() {
return file;
}
/**
* @param file the file to set
*/
public void setFile(byte[] file) {
this.file = file;
}
}
和我的數據庫表有以下結構:
Create UploadFile(FILE_NAME` VARCHAR(1000) NOT NULL,
`FILE` BLOB NOT NULL);
你會得到什麼異常? – soulcheck 2011-11-04 08:50:54