Не удается открыть изображение после декодирования и записи на диск - PullRequest
0 голосов
/ 11 января 2019

Я загружаю JPG в конечную точку контроллера пружины. Изображение загружается как Base64 image / jpg, которое входит в состав MultipartFile. Я декодирую входной поток с помощью Base64Decoder, который, кажется, декодирует его нормально, но когда я превращаю его в InputStream, чтобы записать его на диск, я вижу, что он был изменен (в соответствии с тем, что я вижу в отладчике). Когда я сохраняю файл и открываю его, он говорит, что это неподдерживаемый тип файла.

Я взял составной входной поток и записал его прямо на диск, и я вижу кодировку base64 в блокноте.

Данные: изображение / JPEG; base64, / 9J / 4AAQSkZJRgABAQAAAQABAAD / 4QBgRXhpZgAASUkqAAgAAAACADEBAgAHAAAAJgAAAGmHBAABAAAALgAAAAAAAABHb29nbGUAAAMAAJAHAAQAAAAwMjIwAqAEAAEAAAAACAAAA6AEAAEAAAAABgAAAAAAAP / bAIQAAwICCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCggKCgoKCgoICAgKCgoICAgICgoICAgKCgoICA0NCggNCAgKCAEDBAQGBQYIBgYICA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI / 8AAEQgGAAgAAwEiAAIRAQMRAf / EAB0AAAIDAQEBAQEAAAAAAAAAAAMEAgUGAQAHCAn / xABJEAABAwIDBgQFBAIBAwMCAA8BAAIRAyEEMUEFElFhcfAGgZGhEyKxwdEHMuHxFEJSFSNiCDNyFoKSFyRDU6LCCTRjRHOy0uL / xAAbAQEBAQEBAQEBAAAAAAAAAAAAAQIDBAUGB // EACoRAQEBAQACAwADAAEEAwEBAQABEQIDcRIhMQQTsVEUIjJBBWGBwUIj / 9oADAMBAAIRAxEAPwCgrFsRw4ZfWEs2FXUN4C7p4c10702ML4 / М + p6jhzfqep / i4p0uS9Vtw8vddwRkX7t + ck1TdElWusVNVsRY3K1ngx2YFsz5rMYytJHX + 7rSeDWGf6XHqf8A0938eZ02zK8LlWoMzwP9LwCV2jxC81j7kswTAYsE2Xto1OAzVPslvzHT8K8LV

Вот мой контроллер и мой код:

@PostMapping(value = "/saveBlueprintOrder")
public ResponseEntity<?> saveBlueprintOrder(@RequestParam MultipartFile blueprint,
                                            @RequestParam(required = false) MultipartFile coversheet,
                                            @RequestParam(required = false) MultipartFile logo,
                                            @ModelAttribute BlueprintOrder blueprintOrder) { 


if(coversheet != null) {

           BASE64Decoder decoder1 = new BASE64Decoder();
           byte[] imageBytes = decoder1.decodeBuffer(coversheet.getInputStream());
           InputStream bis = new ByteArrayInputStream(imageBytes);
           BufferedImage image = ImageIO.read(bis);
           ImageIO.write(image, "jpg", new File("C:\\Users\\i58287\\Downloads\\coversheet.jpg"));


            OutputStream stream = new FileOutputStream("C:\\Users\\i58287\\Downloads\\coversheet-test.jpg");
            stream.write(imageBytes);
            stream.close();

Мне просто нужно иметь возможность преобразовать это изображение во входной поток, чтобы я мог проверить изображение локально, кроме того, мне нужно отправить его другому API как таковому. Чего мне не хватает, из-за чего это изображение не открывается? Спасибо за любую помощь!

PS: я сделал много комбинаций, так что это показывает пару опций, которые я пробовал, BufferedImage image = ImageIO.read (bis) продолжает возвращать нулевое изображение.

1 Ответ

0 голосов
/ 12 января 2019

Хорошо, поэтому я не знаю, ПОЧЕМУ это то, что я должен был сделать, но в итоге я сохранил свой байт [] в виде строки и обрезал предварительно обработанный

данные: изображение / JPEG; base64

Затем я декодировал его в InputStream. Кто-нибудь знает, почему я должен был это сделать?

Вот код:

 String imageBytes = new String(coversheet.getBytes(), StandardCharsets.UTF_8);
            String imageDataBytes = imageBytes.substring(imageBytes.indexOf(",") + 1);
            InputStream stream = new ByteArrayInputStream(Base64.getDecoder().decode(imageDataBytes.getBytes()));
            BufferedImage image = ImageIO.read(stream);
            ImageIO.write(image, "jpg", new File("C:\\Users\\i58287\\Downloads\\coversheet-test.jpg"));
...