Groovy encodeBase64()返回PNG图像文件的意外结果

时间:2019-02-08 19:03:57

标签: groovy encode

我正在尝试将Groovy中的PNG图像文件转换为Base64编码。

这是我的代码:

ImageFile = new File("D:/DATA/CustomScript/Logo.png").text; 
String encoded = ImageFile.getBytes().encodeBase64().toString();

结果如下:

iVBORw0KGgoAAAANSUhEUgAAAIQAAABPCAIAAAClCfqHAAAABGdBTUE的 AALE / C / XH BQAAAAlwSFlzAAAOwwAADsMBx2 + oZAAAAQ1JREFUeF7t1KGRgwAURdFVyHQbSwOkKlrIoECDSwusoYgDcz97396Z / 3eGUQxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgzIE2IcxzHP87qu176tJ8T4 / X7Lsuz7fu3b6k1BigEpBq的 QYP2JAig EpBqQYP2JAigEpBqQYP2JAigEpBqQYP2JAigEpBqQYP2JAigEpBq的 QYP2JAigEp BqQYP2JAnhNj27ZxHN / V9 / f7vU5385wYn8 / n9XoNwzBN03W6l / P8BwSpsfw4c1 / 6AAAAAElFTkSuQmCC

通过https://www.base64encode.org/传递的同一张图片会给出以下结果:

iVBORw0KGgoAAAANSUhEUgAAAIQAAABPCAIAAAClCfqHAAAABGdBTUE的 AALGPC / XH BQAAAAlwSFlzAAAOwwAADsMBx2 + oZAAAAQ1JREFUeF7t1KGRgwAURdFVyHQbSwOkKlrIoECDSwusoYgDc497396Z / 3eGUQxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgzIE2IcxzHP87qu176tJ8T4 / X7Lsuz7fu3b6k1BigEpBq的 QYkGJAig EpBqQYkGJAigEpBqQYkGJAigEpBqQYkGJAigEpBqQYkGJAigEpBq的 QYkGJAigEp BqQYkGJAnhNj27ZxHN / V9 / f7vU5385wYn8 / n9XoNwzBN03W6l / P8BwSpsfw4c1 / 6AAAAAElFTkSuQmCC < / p>

我尝试突出显示一些差异。显然,两个编码字符串是不同的。

问题是我必须将此图像的Base64编码传递给另一个系统,并且它正在接受https://www.base64encode.org/中的图像,但是拒绝了Groovy生成的图像。

有什么想法我在这里做错了吗?

2 个答案:

答案 0 :(得分:2)

您在此处遇到编码问题。二进制数据不是字符数据;字符数据受编码影响。使用文件的text代替bytes。例如

def f = "/tmp/screenshot-000.png" as File
assert f.bytes.encodeBase64().toString()==("/tmp/encoded_20190208131326.txt" as File).text

答案 1 :(得分:0)

用户cfrick的回答非常有帮助。不幸的是,它没有解决我的问题。我相信原因是我使用的是Groovy的旧版本。

此代码最终解决了我的问题:

String base64Image = "";
File file = new File(imagePath);
FileInputStream imageInFile = new FileInputStream(file);
byte[] imageData = new byte[file.size()];
imageInFile.read(imageData);
base64Image = Base64.getEncoder().encodeToString(imageData);