代码之家  ›  专栏  ›  技术社区  ›  Juliar Nasution

如何在FileInputStream中从数据库读取图像Blob类型

  •  0
  • Juliar Nasution  · 技术社区  · 7 年前

    图像格式为Blob。 我使用ApachePOI制作MS word文件。

    XWPFRun run.addPicture( new FileInputStream(ImageFile) , ImageFormat, ImageName, Units.toEMU(650), Units.toEMU(80));
    

    那么如何使“图像Blob类型”可以在FileInputStream中读取呢? 我已经使用file类将其转换为“file”,并将其转换为OutputStream对象,但这不起作用。 这是我最后的密码

    ................    
    XWPFRun run1 = paragraph.createRun();        
        File image = get_dataImage();
        String gambar = image.toString();
        int imgFormat = getImageFormat(nama_gambar());
        run1.addPicture( new FileInputStream(image) , imgFormat, nama_gambar(), Units.toEMU(650), Units.toEMU(80));
        CTDrawing drawing = run1.getCTR().getDrawingArray(0);
        CTGraphicalObject graphicalobject = drawing.getInlineArray(0).getGraphic();
        CTAnchor anchor = getAnchorWithGraphic(graphicalobject, nama_gambar(), 
        Units.toEMU(600), Units.toEMU(70), 
        Units.toEMU(-5), Units.toEMU(-10));
                    drawing.setAnchorArray(new CTAnchor[]{anchor});
                    drawing.removeInline(0);
    ........................
    

    函数获取图像文件

    public static File get_dataImage() throws SQLException, IOException {
            File file = null;
            Connection conn = Koneksi.getKoneksi();
            String sql = "SELECT*FROM setting";
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                Blob imageBlob = resultSet.getBlob("file_gambar");
                byte [] array = imageBlob.getBytes( 1, ( int ) imageBlob.length() );
                file = File.createTempFile("something-", ".binary", new File("."));
            }
            return file;
        }
    

    public String nama_gambar() throws SQLException {
            String nama_gambar = null;
            Connection conn = Koneksi.getKoneksi();
            String sql = "SELECT*FROM setting";
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                nama_gambar = resultSet.getString("nama_gambar");
            }
            return nama_gambar;
        }
    

    这就是结果 enter image description here

    1 回复  |  直到 7 年前
        1
  •  0
  •   Juliar Nasution    7 年前

    我刚找到解决办法。我不知道为什么我没有意识到,解决方法很简单。可能是因为这几天我因为睡眠不足而太困了

    public static InputStream get_dataImage() throws SQLException, IOException {
                InputStream in = null;
                Connection conn = Koneksi.getKoneksi();
                String sql = "SELECT*FROM setting";
                PreparedStatement preparedStatement = conn.prepareStatement(sql);
                ResultSet resultSet = preparedStatement.executeQuery();
                if (resultSet.next()) {
                    Blob imageBlob = resultSet.getBlob("file_gambar");
                    in = imageBlob.getBinaryStream();
                }
                return in;
            }