Загрузка образа JSF с кодировкой Base64 сохранена в базе данных - PullRequest
0 голосов
/ 08 сентября 2018

Мне нужно загрузить изображение с кодировкой Base64, сохраненное в базе данных на странице JSF с простыми лицами. Кто-то может направить меня.

Мой метод для скачивания

ByteArrayInputStream bis = new ByteArrayInputStream(Base64.decodeBase64(getCargo().getArquivoDescricao()));
Iterator<?> readers = ImageIO.getImageReadersByFormatName("jpg");
ImageReader reader = (ImageReader) readers.next();
Object source = bis; 
ImageInputStream iis = ImageIO.createImageInputStream(source); 
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
Image image = reader.read(0, param);
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bufferedImage.createGraphics();
g2.drawImage(image, null, null);
File imageFile = new File(File.separator + "home" + File.separator + "ederson" + File.separator + "Imagens" + File.separator + "sapato.jpg");
ImageIO.write(bufferedImage, "jpg", imageFile);

Мое изображение сохранено в базе данных с кодировкой Base64

enter image description here

ERROR

Caused by: javax.imageio.IIOException: Not a JPEG file: starts with 0x75 0xab
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImageHeader(Native Method)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readNativeHeader(JPEGImageReader.java:620)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly(JPEGImageReader.java:347)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.gotoImage(JPEGImageReader.java:492)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readHeader(JPEGImageReader.java:613)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1070)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1050)
    at com.sistema.bean.cadastro.CargoBean.download(CargoBean.java:190)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:181)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 84 more

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Попробуйте,

String data = "data:image/jpeg;base64,/9...";
String base64Image = data.split(",")[1];
byte[] imageBytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(base64Image);

BufferedImage img = ImageIO.read(new ByteArrayInputStream(imageBytes));

Или сохраните строку Base64 в базе данных без data:image/jpeg;base64, part.

0 голосов
/ 08 сентября 2018

Возможно, вам нужно удалить объявление Base64 в сохраненной строке, так как оно не является частью строки base64, которую нужно декодировать.

base64ImageString = imagease64String.replace('data:image/jpeg;base64,',''))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...