Base64上传 - 效果

时间:2016-06-13 19:54:23

标签: java spring image

在客户端,我将图像裁剪为宽度和高度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);

}

1 个答案:

答案 0 :(得分:0)

Base64编码每3个字节的二进制数据使用4个字节。这可能很好 - 它的数据只有33%。

我更关心的是将此数据作为请求参数传递,而不是在请求正文中传递。正如您在this question中所看到的,有时会限制单个请求参数中数据服务器和客户端可以处理的数量。我考虑使用Spring的@RequestBody代替。