Java 多部分文件到 blob 然后返回图像有大量随机字符

Java Multipart file to blob then back to Image has loads of random characters

我从 jsp 接收图像,转换成字节,然后 blob 并将其保存在我的数据库中,然后在不同的页面上检索它,当我检索图像时,我得到以下字符串。

'x*??{[?Y?>YE *?????_/???????~%?+y?`??uH????#??\t?????|B??k?-??Z4V?U7?F???m+(?? ? I??pq^?Q???????18?R???-???>0~?sXxCI?;[;t???9?fBX?Bp?A??^M?k? ??G?S?u???????r?U&‚w*??8????`??> Y?2?????1?j$??\??DR[??t0? pps?_Ex? ???_o?*?? xV)?6D8?$??!?9??~???N?`???}W?s?gNUf?Mn>?s?3?r?3M???X???Q????N!pr~?W????Mjq5??????2m???8????x??V?????????[???"??*,I?/@s?V?d?B?/?Vb?&R?n|?>??2????)?r??1??%7?Q??^f?R?C?????mvm??%6?K?p??;O?Z?&?????u?????\???R"ZOex???VkE???????_??????K?M@=??o?Z[?[hb?H?V????

我在这里手动删减了这个。 这是我做的标签。

     <img src="data:image/jpeg;base64,${img}" width="100" height="100"></img>

我不太确定这里出了什么问题,这里是我把文件变成字节 [] 然后变成 blob 的地方。

    byte[] byteData = file.getBytes();
    Blob blobs = new SerialBlob(byteData); 

然后我如何将它转换成 base64 字符串。

    String base64DataString = new String(byteData , "UTF-8");
    System.out.println(base64DataString);
    model.addAttribute("img", base64DataString);

如果有人知道如何将此字符串转换为可用于重现图像的普通 base64 字符串,那将非常有帮助。 吉姆

String base64DataString = Base64.getEncoder().encodeToString(byteData);

永远不要将二进制数据转换为字符串,它包含 Unicode,主要是 UTF-16 字符,其中每个字节花费 2 个字节(一个字符),并且转换需要时间并且可能出错。