我正在将jpg上传到spring控制器端点。图像以Base64图像/ jpg的形式上传,并以MultipartFile的形式出现。我正在使用Base64Decoder解码输入流,这似乎可以对其进行解码,但是当我将其转换为InputStream并将其写出到磁盘时,我可以看到它已被修改(根据我在调试器中看到的内容)。当我保存文件并打开它时,它说这是不受支持的文件类型。
我采用了多部分输入流,并将其直接写入磁盘,然后在记事本中看到了base64编码。
数据:图像/ JPEG; BASE64,/ 9J / 4AAQSkZJRgABAQAAAQABAAD / 4QBgRXhpZgAASUkqAAgAAAACADEBAgAHAAAAJgAAAGmHBAABAAAALgAAAAAAAABHb29nbGUAAAMAAJAHAAQAAAAwMjIwAqAEAAEAAAAACAAAA6AEAAEAAAAABgAAAAAAAP / bAIQAAwICCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCggKCgoKCgoICAgKCgoICAgICgoICAgKCgoICA0NCggNCAgKCAEDBAQGBQYIBgYICA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI / 8AAEQgGAAgAAwEiAAIRAQMRAf / EAB0AAAIDAQEBAQEAAAAAAAAAAAMEAgUGAQAHCAn / xABJEAABAwIDBgQFBAIBAwMCAA8BAAIRAyEEMUEFElFhcfAGgZGhEyKxwdEHMuHxFEJSFSNiCDNyFoKSFyRDU6LCCTRjRHOy0uL / xAAbAQEBAQEBAQEBAAAAAAAAAAAAAQIDBAUGB // EACoRAQEBAQACAwADAAEEAwEBAQABEQIDcRIhMQQTsVEUIjJBBWGBwUIj / 9oADAMBAAIRAxEAPwCgrFsRw4ZfWEs2FXUN4C7p4c10702ML4 / M + 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)一直返回空图像。
答案 0 :(得分:0)
好吧,所以我不知道为什么要这样做,但是我最终将我的byte []保存为字符串并切断了前面的
data:image / 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"));