提问人:glez 提问时间:9/22/2023 最后编辑:glez 更新时间:9/24/2023 访问量:84
Base64 编码器截断返回的 Sting
Base64 encoder truncates returned Sting
问:
我使用数据 src URL 在 HTML img 标签中显示图像文件,该 URL 包含编码格式的 64 字节图像数据。
当我从编码的字节中获取字符串时,它终止到应该大约 100k 的少数字符。我有一个滚动你自己的编码例程,我从某个地方举起它,它工作正常,尽管速度很慢。
该文件来自多部分编码表单的帖子。我使用 Apache Commons 的 FileItem 来解析已发布的字段。文件内容在那里定义为 String,但它包含二进制数据。如果我使用自己的编码器,它可以在相同的数据上正常工作。我还使用相同的字符串将文件上传到 AWS S3,它在那里工作正常。我尝试绕过字符串,如果我将文件的 InputStream 传递给 Base64.encode(),我会得到同样的错误。对返回的编码字符串的检查显示其被严重截断。
下面是包含图像的变量。我还尝试传递输入流进行编码并获得相同的结果。我试过了.也试过了.file
String
encode().toString()
encodeToString()
new String(bytes, “UTF-8”)
我不明白为什么要截断返回的 ASCII 字符串。任何帮助将不胜感激。Base64.encodeToString
使用 Java 和 JSP。
String thumbUrl = "data:image/jpeg;base64," + Base64.getEncoder().encodeToString(file.getBytes());
<img style="width:200px;" src="<%= thumbUrl %>" />
更新:代码和输出以演示问题。
byte[] temp = fileParam.value.getBytes();
System.out.println("input len: " + temp.length);
temp = Base64.getEncoder().encode(temp);
System.out.println("enc len: " + temp.length);
String z = new String(temp);
System.out.println("z string len: " + z.length());
System.out.println("enc string len: " + temp.toString().length());
String myEncString = NetHelper.encodeBase64(fileParam.value);
System.out.println("my encoder string len: " + myEncString.length());
Output:
input len: 3493
enc len: 4660
z string len: 4660 <<< GOOD string length. Doesn't render
enc string len: 10 <<< BAD string returned
my encoder string len: 4660
答:
格列兹,
问题似乎不在于字节编码。
你提到
下面是包含图像的变量。
file
String
您是否检查是否正确加载了文件?
通常,在 Java 中加载二进制文件时不会得到内容。
你如何加载它?你检查过这个字符串的长度吗?String
评论
我发现new String(bytes)返回正确的长度字符串。我得到了一个完整的字符串,但它没有正确呈现,所以还有其他事情发生。也许 Base64.toString() 中有一个错误会截断返回的字符串。
上一个:截断的普通 MLE
评论