`

批量导入图片保存成blob格式

    博客分类:
  • java
阅读更多


 /**
  * 创建目录
  * @param directory
  * @param subDirectory
  */
 private void createDirectory(String directory, String subDirectory) {
  String dir[];
     File fl = new File(directory);
     try {
       if (subDirectory == "" && fl.exists() != true){
         fl.mkdir();
       } else if (subDirectory != "") {
         dir = subDirectory.replace('\\', '/').split("/");
         for (int i = 0; i < dir.length; i++) {
           File subFile = new File(directory + File.separator + dir[i]);
           if (subFile.exists() == false)
             subFile.mkdir();
           directory += File.separator + dir[i];
         }
       }
     }
     catch (Exception ex) {
      log.error(ex);
     }
 }
 /**
  * 解压缩zip文件
  * @param zipFileName
  * @param outputDirectory
  */
 public HashMap makeZipToFile(String zipFileName, String outputDirectory) {
  HashMap map = new HashMap();
  String newFilePath = "";
  ZipFile zipFile = null;
  try {
    zipFile = new ZipFile(zipFileName);
   java.util.Enumeration e = zipFile.getEntries();
   ZipEntry zipEntry = null;
   createDirectory(outputDirectory, "");
   while (e.hasMoreElements()) {
    zipEntry = (ZipEntry) e.nextElement();
//    System.out.println("-------->>文件名:"+zipEntry.getName());
    if (zipEntry.isDirectory()) {
     String name = zipEntry.getName();
     name = name.substring(0, name.length() - 1);
     File f = new File(outputDirectory + File.separator + name);
     f.mkdir();
     newFilePath = outputDirectory + File.separator + name;
     newFilePath = newFilePath.replace('\\','/');
//     System.out.println("创建目录:" + outputDirectory
//       + File.separator + name);
    } else {
     String fileName = zipEntry.getName();
     fileName = fileName.replace('\\', '/');
     if (fileName.indexOf("/") != -1) {
      createDirectory(outputDirectory, fileName.substring(0,
        fileName.lastIndexOf("/")));
      fileName = fileName.substring(
        fileName.lastIndexOf("/") + 1, fileName
          .length());
     }

     File f = new File(outputDirectory + File.separator
       + zipEntry.getName());
     f.createNewFile();
     InputStream in = zipFile.getInputStream(zipEntry);
     FileOutputStream out = new FileOutputStream(f);
     
     byte[] by = new byte[1024];
     int c;
     while ((c = in.read(by)) != -1) {
      out.write(by, 0, c);
     }
     out.close();
     in.close();
     String saveFilePath = outputDirectory + File.separator
     + zipEntry.getName();
     //图片路径
     saveFilePath = saveFilePath.replace('\\', '/');
     //图片名称
     String saveFileName = zipEntry.getName().substring(zipEntry.getName().lastIndexOf("/")+1,zipEntry.getName().indexOf("."));
     //定义图片大小
     toJPG(saveFilePath,null,100);
     //将数据库查询字段和图片路径放在map中
     map.put(saveFileName, saveFilePath);
//     System.out.println("-------->>创建文件路径:"+saveFilePath);
//     System.out.println("-------->>创建文件名:"+saveFileName);
    }
   }
   //如果不关闭,无法删除zip文件
   zipFile.close();
  } catch (Exception ex) {
   log.error(ex);
  }
  
  boolean flag = true;
  try {
   //保存图片
   savePhotoBatch(map);
   File oldFile = new File(zipFileName);  
   //删除zip文件和解压后的文件
   oldFile.delete();
   deleteDirectory(newFilePath);
  } catch (Exception e) {
   flag =false;
   log.error(e);
  }
  HashMap flagMap = new HashMap();
  flagMap.put("flag", String.valueOf(flag));
  return flagMap;
 }

 public static void toJPG(String source, String dest, int quality) throws JimiException {

  if (dest == null || dest.trim().equals(""))

   dest = source;

  if (!dest.toLowerCase().trim().endsWith("jpg")) {

   dest += ".jpg";

   System.out.println("Overriding to JPG, output file: " + dest);

  }

  if (quality < 0 || quality > 100 || (quality + "") == null

  || (quality + "").equals("")) {

   System.out.println("quality must between ’0’ and ’100’");

   System.out.println("set to DEFAULT value:’75’");

   quality = 100;

  }

  try {

   JPGOptions options = new JPGOptions();

   options.setQuality(quality);

   ImageProducer image = Jimi.getImageProducer(source);

   JimiWriter writer = Jimi.createJimiWriter(dest);

   writer.setSource(image);

   // 加入属性设置,非必要

   // /*

   writer.setOptions(options);

   // */
   writer.putImage(dest);
   
   OutputStream os = new ByteArrayOutputStream();
   
   writer.putImage(os);

  } catch (JimiException je) {
   je.printStackTrace();
   throw je;
  }

 }

  /**
  * 批量保存图片成blob格式
  * @param map
  * @throws Exception
  */
 public void savePhotoBatch(HashMap map) throws Exception{
  Connection conn = null;
  Statement stmt = null;
  OraclePreparedStatement pstmt = null;
  Transaction tx = null;
  OracleResultSet rs = null;
  try{
   Session session = HibernateSessionFactory.getSession();
   conn = session.connection();
   stmt = conn.createStatement();
   tx = session.beginTransaction();
   byte[] userPhotoBytes = new byte[0];
   for(Iterator it = map.keySet().iterator();it.hasNext();){
    String userName = (String)it.next();
    String userPhotoPath = (String)map.get(userName);
    if (userPhotoPath != null && !userPhotoPath.equals("")) {
     File file = new File(userPhotoPath);
     FileInputStream fileInputStream = new FileInputStream(file);
     userPhotoBytes = new byte[fileInputStream.available()];
      rs = (OracleResultSet) stmt
     .executeQuery("SELECT picture FROM human_user WHERE username = '"
       + userName + "' FOR UPDATE");
     if (rs.next()) {
       pstmt = (OraclePreparedStatement) conn
         .prepareStatement("UPDATE human_user SET picture = ? WHERE username = '"
           + userName + "'");
       pstmt.setBinaryStream(1, fileInputStream, (int) file.length());   
       pstmt.executeUpdate(); 
     }
     fileInputStream.close();
    }
   }
   session.flush();
   tx.commit();
  }catch (Exception ex) {
   ex.printStackTrace();
   tx.rollback();
   throw new Exception(ex);
  } finally {
   try {
    if(rs!=null){
     rs.close();
    }
    pstmt.close();
    stmt.close();
    conn.close();
   } catch (SQLException ex) {
    ex.printStackTrace();
   }
   HibernateSessionFactory.closeSession();
  }
}

 /**
  * 删除文件
  * @param fileName
  * @return
  */
  public static boolean deleteFile(String fileName){     
         File file = new File(fileName);     
         if(file.isFile() && file.exists()){     
             file.delete();     
             return true;     
         }else{     
             return false;     
         }     
     }  
 
  /**   
     * 删除目录(文件夹)以及目录下的文件   
     * @param   dir 被删除目录的文件路径   
     * @return  目录删除成功返回true,否则返回false   
     */    
    public static boolean deleteDirectory(String dir){     
        File dirFile = new File(dir);     
        //如果dir对应的文件不存在,或者不是一个目录,则退出     
        if(!dirFile.exists() || !dirFile.isDirectory()){     
            return false;     
        }     
        boolean flag = true;     
        //删除文件夹下的所有文件(包括子目录)     
        File[] files = dirFile.listFiles();     
        for(int i=0;i<files.length;i++){     
            //删除子文件     
            if(files[i].isFile()){     
                flag = deleteFile(files[i].getAbsolutePath());     
                if(!flag){     
                    break;     
                }     
            }     
            //删除子目录     
            else{     
                flag = deleteDirectory(files[i].getAbsolutePath());     
                if(!flag){     
                    break;     
                }     
            }     
        }     
             
        if(!flag){     
            return false;     
        }     
             
        //删除当前目录     
        if(dirFile.delete()){     
            return true;     
        }else{     
            return false;     
        }     
    } 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics