我正在尝试将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生成的图像。
有什么想法我在这里做错了吗?
答案 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);