Groovy encodeBase64 () возвращает неожиданный результат для файла изображения PNG - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь преобразовать файл изображения PNG в кодировку Base64 в Groovy.

1002 * Вот мой код:
ImageFile = new File("D:/DATA/CustomScript/Logo.png").text; 
String encoded = ImageFile.getBytes().encodeBase64().toString();

Я получаю следующее как результат:

1007 * iVBORw0KGgoAAAANSUhEUgAAAIQAAABPCAIAAAClCfqHAAAABGdBTUE ААС / C / хк BQAAAAlwSFlzAAAOwwAADsMBx2 + oZAAAAQ1JREFUeF7t1KGRgwAURdFVyHQbSwOkKlrIoECDSwusoYgDcz97396Z / 3eGUQxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgzIE2IcxzHP87qu176tJ8T4/ X7Lsuz7fu3b6k1BigEpBq QYP2JAig EpBqQYP2JAigEpBqQYP2JAigEpBqQYP2JAigEpBqQYP2JAigEpBq QYP2JAigEp BqQYP2JAnhNj27ZxHN / v9 / f7vU5385wYn8 / n9XoNwzBN03W6l / P8BwSpsfw4c1 / 6AAAAAElFTkSuQmCC 1015 * То же изображение при прохождении через https://www.base64encode.org/ дает следующий результат:

iVBORw0KGgoAAAANSUhEUgAAAIQAAABPCAIAAAClCfqHAAAABGdBTUE AALGPC / XH BQAAAAlwSFlzAAAOwwAADsMBx2 + oZAAAAQ1JREFUeF7t1KGRgwAURdFVyHQbSwOkKlrIoECDSwusoYgDc497396Z / 3eGUQxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgzIE2IcxzHP87qu176tJ8T4 / X7Lsuz7fu3b6k1BigEpBq QYkGJAig EpBqQYkGJAigEpBqQYkGJAigEpBqQYkGJAigEpBqQYkGJAigEpBq QYkGJAigEp BqQYkGJAnhNj27ZxHN / v9 / f7vU5385wYn8 / n9XoNwzBN03W6l / P8BwSpsfw4c1 / 6AAAAAElFTkSuQmCC

1027 * Я попытался кульминационной некоторые различия,Понятно, что обе закодированные строки разные.

Проблема в том, что мне нужно передать кодировку Base64 этого изображения в другую систему, и он принимает код из https://www.base64encode.org/, но отклоняет код, сгенерированный Groovy.

Есть идеи, что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Ответ пользователя 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);
0 голосов
/ 08 февраля 2019

Здесь вы видите проблему с кодировкой.Двоичные данные не являются символьными данными;символьные данные обрабатываются кодировками.Вместо text используйте bytes файла.Например,

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