在客户端,我将图像裁剪为宽度和高度250px。我将图像发送为base64。 cropper的结果总是base64,如果我想从这个多部分做出来的话会有一些问题。
我想知道将图像作为字符串值发送到控制器并管理它的性能,以防有人直接上传图像或任何直接使用api的情况。
上传图片,管理和验证是否正确?
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody ResponseEntity<?> upload(@RequestParam("imageValue") String imageValue, HttpServletRequest request) {
try {
String splitter = ";base64,";
String[] splitted = imageValue.split(splitter);
if (splitted.length != 2)
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
byte[] imageByte = Base64.decodeBase64(splitted[1]);
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
BufferedImage image = ImageIO.read(bis);
if (image == null || image.getHeight() > 250 || image.getWidth() > 250)
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
FooImageData fooImageData = new FooImageData ();
fooImageData.setBase64(imageByte);
fooImageData.setMimeType(splitted[0] + splitter);
fooImageDataService.save(fooImageData);
bis.close();
return new ResponseEntity<>(HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
}
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
答案 0 :(得分:0)
Base64编码每3个字节的二进制数据使用4个字节。这可能很好 - 它的数据只有33%。
我更关心的是将此数据作为请求参数传递,而不是在请求正文中传递。正如您在this question中所看到的,有时会限制单个请求参数中数据服务器和客户端可以处理的数量。我考虑使用Spring的@RequestBody
代替。