`
提烟而过
  • 浏览: 118579 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

POI 读取BLOB类型图片并写入到Excel中

阅读更多

package com.foxconn;

import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;   
import java.io.File;   
import java.io.ByteArrayOutputStream;   
import java.io.IOException;   
import java.io.InputStream;
import java.sql.Blob;
import java.sql.SQLException;
  
import java.awt.image.BufferedImage;   
import javax.imageio.*;   

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class AaE {
 public static void main(String[] args) {   
        FileOutputStream fileOut = null;   
        BufferedImage bufferImg = null;   
        BufferedImage bufferImg1 = null;   
        try {   
         ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); 
      //String ReturnReason = (String) model.getParam("ReturnReason");
      // 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray   
            // 读入图片1
      //BufferedImage bufferImg = ImageIO.read(new File("d:\\album-show_04.jpg"));   
            //如果是从数据库中读取的BLOB类型的图片 从 model中取得该图片 方法略       
         Blob blob = (Blob) model.getParam("fileContent");
       BufferedImage buffer_Img = imgChangeBuffer(blob);  
            ImageIO.write(bufferImg, "jpg", byteArrayOut);   
               
  
            // 创建一个工作薄   
            HSSFWorkbook wb = new HSSFWorkbook();   
            HSSFSheet sheet1 = wb.createSheet("test picture");
            HSSFRow row = sheet1.createRow(0);
            //设置默认高与宽
          sheet1.setDefaultRowHeightInPoints(10);
          sheet1.setDefaultColumnWidth((short) 20);
            HSSFCell cell = row.createCell((short)0);
            cell.setCellValue("aaa");
            HSSFCell cell2 = row.createCell((short)1);
            cell2.setCellValue("bbb");
            HSSFCell cell3 = row.createCell((short)2);
            cell3.setCellValue("ccc");
            HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
            //控制图片显示
            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,   
                    (short) 2, 4, (short)2, 2);   
            anchor.setAnchorType(3); 
            // 插入图片
            patriarch.createPicture(anchor, wb.addPicture(byteArrayOut   
                    .toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));   
          
            fileOut = new FileOutputStream("d:/aa.xls");   
            // 写入excel文件   
            wb.write(fileOut);   
            fileOut.close();   
        } catch (IOException io) {   
            io.printStackTrace();   
            System.out.println("erorr : " + io.getMessage());   
        } finally {   
            if (fileOut != null) {   
                try {   
                    fileOut.close();   
                } catch (IOException e) {   
                    e.printStackTrace();   
                }   
            }   
        }   
    }   
  public static BufferedImage imgChangeBuffer(Blob blob) throws IOException{
     byte[] data = null;
     try {
   InputStream inStream = blob.getBinaryStream();
   long nLen = blob.length();
          int nSize = (int) nLen;
          data = new byte[nSize];
          inStream.read(data);
          inStream.close();
  } catch (SQLException e) {
    this.setMessage("获取图片数据失败,原因:"+e.getMessage());
  }
  BufferedImage bis = ImageIO.read(new ByteArrayInputStream(data));
     return bis;

    }

}

分享到:
评论

相关推荐

    java从数据库查询文件下载成Excel

    在Java编程中,将数据库查询...2) 使用Apache POI将查询结果写入Excel文件;3) 创建HTTP服务供用户下载;4) 下载完成后删除临时文件。这一过程涉及到了数据库操作、文件处理、HTTP响应以及错误处理等多个Java核心技术。

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

    3. **批量导出图片**:导出Oracle中的图片则需要读取BLOB数据并写入文件系统。可以编写PL/SQL过程或者使用Java、C#等编程语言,调用Oracle的JDBC或ODBC驱动,获取BLOB数据并保存为图片文件。 4. **Excel数据交互**...

    Excel导入导出工具类

    在业务层,Excel工具类的核心功能包括读取Excel数据和写入Excel数据。读取时,可以使用Apache POI的Sheet、Row和Cell API来遍历Excel文件。对于每个单元格,可以获取其值并进行类型转换。写入时,创建新的Sheet和Row...

    图片存储到Access数据库中

    然后,使用`PreparedStatement`或`Statement`对象的`setBinaryStream`方法将图片文件读取为字节流并写入BLOB字段。 ```java File file = new File("image.jpg"); FileInputStream fis = new FileInputStream(file);...

    将图片以字节流存到数据库再从数据库获取显示

    最后,将从数据库获取的字节流转回图片并显示。这一步通常在前端完成,通过HTTP响应将字节流发送给浏览器,浏览器会自动解析并显示图片。在服务器端,我们可以使用`ServletOutputStream`将字节流写入HTTP响应。 `...

    Vue结合后台导入导出Excel问题详解

    // 返回ServletOutputStream,用于写入Excel数据 return response.getOutputStream(); } ``` 在前端Vue部分,通常会发送一个请求到后端的导出接口,并处理返回的二进制数据。一种常见的方法是利用`fetch` 或 `...

    easyExcel生成个性化表格(自定义行高,合并,字体,去网格线),前后端分离开发下,返回错误的JSON数据给前端

    EasyExcel通过简单的API,可以快速地读取和写入Excel数据。它采用了内存优化的设计,即使处理大数据量的文件,也能避免内存溢出的问题。对于生成个性化表格的需求,我们可以从以下几个方面进行设置: 1. **自定义...

    文件转化需要的jar包.rar

    在涉及二进制数据的场景中,这可能用于将文件内容存储到数据库的BLOB(Binary Large Object)字段,或者从数据库检索二进制数据并将其保存为文件。JDBC驱动程序允许Java应用程序通过SQL语句与数据库进行交互,包括...

    document-lib

    在Web开发中,文档处理通常涉及到读取、写入、转换以及展示文档,而"document-lib"提供了这样的功能,使得在浏览器环境中进行这些操作变得可能。 在JavaScript的世界里,由于其主要运行在客户端,对于文件的操作...

    word在线浏览

    - 用户权限管理:控制用户对文档的读取、写入和删除权限。 - 版本控制:记录每次修改,便于回滚到先前版本。 5. **配置说明**: - 环境设置:安装必要的开发工具和库,如Node.js、npm或Git。 - 服务器配置:...

Global site tag (gtag.js) - Google Analytics