`

批量导入图片保存成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;     
        }     
    } 

分享到:
评论

相关推荐

    ORACLE批量导入图片到BLOB字段代码示例

    要插入图片的表不是固定的,而且是批量插入很多张,还要考虑到因为图片的文件名错误,修改后要再次插入,此时应避免已经插入的重复执行操作, 浪费时间。 所以就选择先用一张临时表来暂时保存从文件系统读取的照片...

    .net 图片导入数据库

    2. 图像处理:导入图片可能需要对图像进行预处理,如调整大小、转换格式等。.NET Framework或.NET Core提供了`System.Drawing`或第三方库如ImageSharp、SkiaSharp等来处理图像。 3. 数据库连接与操作:要将图片导入...

    Oracle导入导出图片及Excel(标注:没有源代码!)

    2. **批量导入图片**:批量导入图片到Oracle通常需要编程实现。可以使用PL/SQL过程,结合UTL_FILE包读取文件系统中的图片并存入BLOB列。另外,可以使用SQL*Loader或Oracle Data Pump工具,通过控制文件指定BLOB字段...

    ACCESS数据库读取BMP图片

    在Access中,BMP图片可以被当作二进制数据(Binary Large Object,简称BLOB)存储,通常使用OLE对象或Image字段类型来保存。 标题“ACCESS数据库读取BMP图片”暗示了我们需要关注的是如何在Access中处理图片数据。...

    mysql中blob数据处理方式

    在MySQL数据库中,BLOB(Binary Large Object)是一种数据类型,用于存储大量的二进制数据,如图片、音频或视频文件。处理BLOB数据通常涉及到读取、写入和传输这些大对象。以下是一个Java程序的例子,展示了如何从...

    server2000+delphi 图片入库和读取

    例如,使用INSERT语句将图片数据插入到表中,使用SELECT语句查询特定图片,可能还会涉及到BULK INSERT等批量导入数据的命令。 8. BCP (Bulk Copy Program):如果图片数量巨大,可能需要使用BCP工具进行批量导入,以...

    Ado数据库练习

    例如,使用Blob字段类型存储图片数据,然后利用FileOpen、FileRead和FileClose函数读取图片文件内容,最后将其转化为二进制数据传入数据库。 3. 文本和Word文档存储:对于文字内容,可以直接作为字符串存储在数据库...

    sqltpdc.zip

    标签“SQL数据库内图片导出工具”再次强调了这个工具的主要功能和应用场景,即专注于解决SQL数据库中图片数据的导入导出问题。 压缩文件“tpdc”可能是这个工具的可执行文件或者包含有工具所需的一些配置文件。在...

    servelet可以将文件保存到数据库

    这通常涉及到BLOB(Binary Large Object)类型字段的使用,BLOB用于存储二进制大对象,如图片、文档或视频。在Java中,可以使用JDBC(Java Database Connectivity)来操作数据库。 在连接数据库之前,需要配置...

    pgmagick是另一个基于boost.python的GraphicsMagickImageMagick包装器。.zip

    通过使用pgmagick,你可以轻松地在Python脚本中实现复杂的图像处理任务,比如批量转换图片格式、调整图片尺寸、添加水印、进行图像合成等。此外,pgmagick还支持异步操作,这在处理大量图像时能够显著提高效率。 在...

    微信小程序教程之本地图片上传(leancloud)实例详解

    同时,对于大量图片的上传,可以考虑使用批量操作或队列管理,以优化用户体验和提高上传效率。此外, LeanCloud 提供了丰富的文档和示例,可以帮助开发者更深入地理解和使用其服务。 总之,通过微信小程序结合 ...

Global site tag (gtag.js) - Google Analytics