无法使用java.util.Base64将JPG图像编码为字符串
我正在使用java.util.Base64对一些图像进行编码,以将字符串发送到前端。 大多数PNG图像都正常工作,我可以使用在线转换将Base64字符串结果转换回图像。 但是JPG文件不知怎么被破坏了 我将编码的base64 JPG字符串复制到在线转换器,该转换器无法渲染图像。然后我把那张照片下载到了我的本地电脑上。当我试图打开该图像时,观众说: 解释JPEG图像文件时出错(不是JPEG文件:以0x99开头 0xaf) 是否有其他方法可以将JPG图像编码为字符串并发送到前端,以便前端可以显示此图像?假设Base64现在不适用于JPG 在线转换器说: 文件的MIME被检测为“应用程序/八位字节流”,但 解码器将其显示为“图像/八位字节流” 预览图像浏览器无法将文件显示为 “图像/八位字节流” 文件信息•MIME类型:图像/八位字节流•扩展名:bin•大小:4 KB•下载:image.bin无法使用java.util.Base64将JPG图像编码为字符串,java,base64,png,jpeg,Java,Base64,Png,Jpeg,我正在使用java.util.Base64对一些图像进行编码,以将字符串发送到前端。 大多数PNG图像都正常工作,我可以使用在线转换将Base64字符串结果转换回图像。 但是JPG文件不知怎么被破坏了 我将编码的base64 JPG字符串复制到在线转换器,该转换器无法渲染图像。然后我把那张照片下载到了我的本地电脑上。当我试图打开该图像时,观众说: 解释JPEG图像文件时出错(不是JPEG文件:以0x99开头 0xaf) 是否有其他方法可以将JPG图像编码为字符串并发送到前端,以便前端可以显示此图
私有映射下载(字节[]输出)引发IOException、ScriptException{
try(ZipInputStream zis=newzipinputstream(newbytearrayinputstream(output))){
ZipEntry-ZipEntry=zis.getNextEntry();
字节[]缓冲区=新字节[4096];
Map mapTable=新HashMap();
内伦;
while(zipEntry!=null){
字符串zipEntryName=zipEntry.getName();
if(zipEntryName!=null){
if(zipEntryName.endsWith(“.png”)| | zipEntryName.endsWith(“.jpg”)){
字符串encodeImage=“”;
而((len=zis.read(buffer))>0){
encodeImage=java.util.Base64.getEncoder().withoutPadding().encodeToString(缓冲区);
}
mapTable.put(zipEntryName,encodeImage);
}否则{
StringBuilder sb=新的StringBuilder();
log.info(“文件名”+zipEntryName);
而((len=zis.read(buffer))>0){
sb.append(新字符串(缓冲区,0,len));
}
字符串dataStr=sb.toString();
put(zipEntryName,dataStr);
}
}
zipEntry=zis.getnextery();
}
zis.closeEntry();
返回映射表;
}捕获(ioe异常ioe){
log.error(“IOException{}”,ioe);
扔ioe;
}
}
@Pshemo与问题无关,但观点正确。改变。谢谢。Base64可以表示任何二进制数据。您的PNG是否小于4k?我所看到的一个常见的问题是B64和缓冲区的缓冲区不是正确的大小,在B64字符串的中间得到private Map<String, String> download(byte[] output) throws IOException, ScriptException {
try (ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(output))) {
ZipEntry zipEntry = zis.getNextEntry();
byte[] buffer = new byte[4096];
Map<String, String> mapTable = new HashMap<>();
int len;
while (zipEntry != null) {
String zipEntryName = zipEntry.getName();
if (zipEntryName != null) {
if (zipEntryName.endsWith(".png") || zipEntryName.endsWith(".jpg")) {
String encodeImage = "";
while ((len = zis.read(buffer)) > 0) {
encodeImage = java.util.Base64.getEncoder().withoutPadding().encodeToString(buffer);
}
mapTable.put(zipEntryName, encodeImage);
} else {
StringBuilder sb = new StringBuilder();
log.info("File Name " + zipEntryName);
while ((len = zis.read(buffer)) > 0) {
sb.append(new String(buffer, 0, len));
}
String dataStr = sb.toString();
mapTable.put(zipEntryName, dataStr);
}
}
zipEntry = zis.getNextEntry();
}
zis.closeEntry();
return mapTable;
} catch (IOException ioe) {
log.error("IOException {}", ioe);
throw ioe;
}
}