无法使用java.util.Base64将JPG图像编码为字符串

无法使用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图像编码为字符串并发送到前端,以便前端可以显示此图

我正在使用java.util.Base64对一些图像进行编码,以将字符串发送到前端。 大多数PNG图像都正常工作,我可以使用在线转换将Base64字符串结果转换回图像。 但是JPG文件不知怎么被破坏了

我将编码的base64 JPG字符串复制到在线转换器,该转换器无法渲染图像。然后我把那张照片下载到了我的本地电脑上。当我试图打开该图像时,观众说:

解释JPEG图像文件时出错(不是JPEG文件:以0x99开头 0xaf)

是否有其他方法可以将JPG图像编码为字符串并发送到前端,以便前端可以显示此图像?假设Base64现在不适用于JPG

在线转换器说:

文件的MIME被检测为“应用程序/八位字节流”,但 解码器将其显示为“图像/八位字节流”

预览图像浏览器无法将文件显示为 “图像/八位字节流”

文件信息•MIME类型:图像/八位字节流•扩展名:bin•大小:4 KB•下载:image.bin

私有映射下载(字节[]输出)引发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字符串的中间得到=/Cuff>填充。你找到什么解决办法了吗?
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;
    }
  }