2016-06-13 4 views
1

クライアント側では、画像を幅と高さ250ピクセルにトリミングします。私はbase64として画像を送信します。作物の結果は常にbase64であり、この複数の部分から作りたい場合にはいくつかの問題があります。Base64のアップロードパフォーマンス

誰かが画像を直接アップロードする場合や、直接使用する状況がある場合に、画像をコントローラに送信して管理するための、画像を文字列値として送信する場合のパフォーマンスについては疑問です。

画像のアップロード、管理、検証の正しい方法はありますか?

@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

Base64エンコーディングは、3バイト分のバイナリデータごとに4バイトを使用します。これはおそらく33%多いデータです。

私は、このデータを要求の本体ではなくリクエストパラメータとして渡すことにもっと関心があります。 this questionのように、1つのリクエストパラメータでデータサーバーとクライアントが処理できる量に制限があることがあります。私は代わりに春の@RequestBodyを使用することを検討するだろう。

+0

POSTパラメータはリクエストの本体で渡されます。 – EJP