如何使用java将doc,pdf和image文件保存到mysql数据库?

prt*_*prt 5 java jsf hibernate

我试图挽救.doc,.pdf,.txt,使用Hibernate,JSF和MySQL和图像文件到我的数据库.

我创建了一个列来保存BLOB类型的文件.如果我保存.txt类型,则文件正确保存.

如果我想保存任何其他格式的文件,那么我得到一个例外.在我的bean中,我创建了一个字段名称: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);
Run Code Online (Sandbox Code Playgroud)

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;
   }
}
Run Code Online (Sandbox Code Playgroud)

我的数据库表有以下结构:

Create UploadFile(FILE_NAME` VARCHAR(1000) NOT NULL,
 `FILE` BLOB NOT NULL);
Run Code Online (Sandbox Code Playgroud)

Abi*_*Abi 1

最好将文件保存在一个位置并将该位置保存在数据库中

  • @James:那你为什么问?您是否期望我在 600 字的评论中得出结论性且论证充分的答案? (6认同)
  • 也许在一些非常微不足道的情况下,但通常建议将二进制数据存储在文件系统上而不是数据库中并不是一个好主意。 (2认同)