如何将图像存储为BLOB,然后在Play!-Powered网站中显示?

时间:2012-02-19 07:46:09

标签: java image playframework blob yaml

我正在尝试为Play创建一个initial-data.yml文件!框架应用。 Web应用程序的一部分涉及图像(用于配置文件图片等),我想将它们作为BLOB存储在我的MySQL数据库中(我知道这不是最佳实践,稍后将使用文件系统)。我想知道如何在我的YML文件中放置一个“测试”图像,以及如何在Web应用程序中访问它并显示它。任何帮助,将不胜感激。以下是我到目前为止所尝试的内容:

YML的一部分:

Picture(Picture1):
     picture:     010001010100010101000101010001010100010101000101010001010100010101000101010001010100010101000101010001010100010101000101|image/png

我们的Hibernate模型的图片为byte[]

以下是我尝试访问HTML中的图片的方法:

#{if _post.picture}
        <!-- display the picture -->
        <p> Hey, a picture should go here.</p>
        <img src="@{Application.showImage(_post.getPicture().getBinaryImage())}" alt="long islands for life"/>
    #{/if}

以下是getBinaryImage()

private ByteArrayInputStream getBinaryImage() {
        try {
            BufferedImage image = ImageIO.read(new ByteArrayInputStream(byteImage));
            ImageInputStream is = ImageIO.createImageInputStream(image);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ImageIO.write(image, "png", baos);
            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
            return bais;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

现在我在这个方法的第一行得到一个NullPointerException,因为它似乎没有将图像/ byte []存储在数据库中。有任何想法如何将其妥善存储在数据库中,然后在网页上显示?

1 个答案:

答案 0 :(得分:1)

您应该以!二进制

前面的Base64编码形式添加整个二进制数据
binaryData: !!binary VGhpcyBTdHJpbmcgaXMgc3RvcmVkIGluIHlhbWwgZmlsZSB1c2luZyBiYXNlNjQ=

此示例来自Play Framework示例

samples-and-tests/just-test-cases/test/yamlTestData.yml