2016-03-22 11 views
0

put-volley-requestを使用してphp/slimを実行しているサーバーにbase64でエンコードされた画像を送信する際に問題が発生します。Base64でエンコードされた画像がアンドロイドからサーバーにアップロードされるときに途切れる

送信する前にデータを出力すると表示がうまくいくように見えますが、サーバー上でデータを取得するとすぐにデータが破損します。画像を送信するための

私のAndroidのコードは次のようになります。私のアンドロイド-機能での出力がどのように見える

$app->put('/image', function() use ($app){ 
    $image = $app->request->put('image'); 
    $response['error'] = false; 
    $response['image'] = $image; 
    echoResponse(200, $response); 
}); 

:私のサーバー上で

private void updateImage(Bitmap myImage) { 
    String tag_string_req = "req_updateimage"; 

    String updateUrl = String.format(API_DOMAIN + AppConfig.URL_UPDATE_IMAGE); 
    StringRequest strReq = new StringRequest(Request.Method.PUT, updateUrl, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 

      try { 
       //do some stuff 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 

    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "Error: " + error.getMessage()); 
     } 

    }){ 

     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("Content-Type", "application/json; charset=UTF-8"); 

      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
      myImage.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream); 
      byte[] byteArray = byteArrayOutputStream.toByteArray(); 
      String base64Image = Base64.encodeToString(byteArray, Base64.DEFAULT); 
      params.put("image", base64Image); 

      System.out.println(params); 
      return params; 
     } 
    }; 

    AppController.getInstance().addToRequestQueue(strReq, tag_string_req); 
} 

のように、私は機能を持っています正しいbase64でエンコードされた画像。 私のサーバーには全体の約30%しかありません。手伝って頂けますか?私のバグはどこですか?なにが問題ですか?事前に

おかげで、

RiPr

+0

投稿の最大データサイズをphp.iniから変更します –

+0

イメージサイズは40kbから最大100kbです。デフォルトのポスト・マックス・データ・サイズは約20Mです。私はこれが私の問題を解決しないと思う。 – RiPr

+0

あなたのイメージは文字列に変更されています。つまり、base64の場合、問題が発生する可能性があります。画像をサーバーにアップロードするには複数の部分を試してください。迅速かつ効果的な方法 –

答えて

0

あなたは正しいコンテンツタイプを設定していないように見えます。 Javaコードで

...

params.put( "Content-Typeの"、 "アプリケーション/ jsonの;のcharset = UTF-8");

これはあなたのスリムなアプリには、送信しようとしているデータがapplication/json形式であることを示しています。

送信するデータ構造に合わせてエンコードを変更してみてください。

+0

- このjsonにbase64エンコードされた画像をattrの値として入れたのはなぜjson形式ではないのですか? JSONは(この場合) のように見えます。{ "image": "HERECOMESMYBASE64ENCODEDIMAGEANDSOON" } – RiPr