Null从ImageIO.read(new ByteArrayInputStream(bs))返回;

时间:2014-02-02 22:21:32

标签: java string image base64

我正在尝试转换Base64编码的字符串(来自图片) [link to convertor]。我是这样做的:首先我转换字符串,即: String str =

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 
像这样:

byte[] imageString = str.getBytes("UTF-8");

然后我想将文件保存在这样的机器上:

 public boolean uploadImage(byte[] imageString, String name, String extension)
{
    BufferedImage image = null;
    String path = EVENT_FOLDER + name + "." + extension;

    try
    {
        image = ImageIO.read(new ByteArrayInputStream(imageString)); //null returned here
        ImageIO.write(image, extension, new File(path));
    } 
    catch (IOException e)
    {
        e.printStackTrace();
        return false;
    }

但是我在这一行上得到了空:image = ImageIO.read(new ByteArrayInputStream(imageString));

我做错了什么?

1 个答案:

答案 0 :(得分:4)

  

我做错了什么?

您忽略了数据是Base64编码的事实,不是 UTF-8。

要将字符串转换为字节以获取原始数据,您需要反转该Base64编码,例如使用this library

byte[] imageData = Base64.decode(str);