Androidクライアントがサービス側に画像をアップロードすると、画像が破損する問題を解決します.

8373 ワード

  • 問題:クライアントはandroidで、jsonを通じてピクチャをサービス側に転送し、サービス側が解析し、ピクチャを生成する際に破損します.
  • クライアントで画像をstring形式に変換するが、ここではBase 64を通過することに注意する.Encodeは符号化しjacksonでシーケンス化する
     1 /**
    
     2      *   BASE64Encoder     base64       string
    
     3      * 
    
     4      * @param imgFile     
    
     5      * @return       string
    
     6      */
    
     7     public static String f_imageToString(String imgFile)
    
     8     {
    
     9         //                ,     Base64    
    
    10         InputStream in = null;
    
    11         byte[] data = null;
    
    12         //         
    
    13         try
    
    14         {
    
    15             in = new FileInputStream(imgFile);
    
    16             data = new byte[in.available()];
    
    17             in.read(data);
    
    18             in.close();
    
    19         }
    
    20         catch (IOException e)
    
    21         {
    
    22             e.printStackTrace();
    
    23         }
    
    24         //   Base64           
    
    25         String str = new String(Base64.encode(data));
    
    26         return str;
    
    27     }

     
  • サービス側でjacksonによってbase 64符号化されたstringデータを取得し、base 64復号を行い、ピクチャを生成する
     1 /**
    
     2      *   BASE64Decoder  ,     
    
     3      * 
    
     4      * @param imgStr     string
    
     5      * @return
    
     6      */
    
     7     public static boolean f_stringToImage(String imgStr, String imgFilePath)
    
     8     {
    
     9         //           Base64       
    
    10         if (imgStr == null)
    
    11             return false;
    
    12         try
    
    13         {
    
    14             // Base64  
    
    15             byte[] b = Base64.decode(imgStr);
    
    16             for (int i = 0; i < b.length; ++i)
    
    17             {
    
    18                 if (b[i] < 0)
    
    19                 {
    
    20                     //       
    
    21                     b[i] += 256;
    
    22                 }
    
    23             }
    
    24             //   jpeg  
    
    25             OutputStream out = new FileOutputStream(imgFilePath);
    
    26             out.write(b);
    
    27             out.flush();
    
    28             out.close();
    
    29             return true;
    
    30         }
    
    31         catch (Exception e)
    
    32         {
    
    33             return false;
    
    34         }
    
    35     }