2017-10-18 13 views
0

multipart/form-dataを使用して、イメージ付きのJSONオブジェクトを内部で送信する方法がわかりません。Http POST multipart/form-dataを使用してJSONファイルを内部で送信する方法

POST /api/user/update 
{ id: 123, 
    user: { logo: !!here_file!! } 
} 

私はロゴフィールドにbase64文字列を入れてみました、そしてちょうどこのJSONオブジェクトを渡しますが、このアプローチは動作しません、サーバは、コンテンツ・タイプを必要とします:マルチパート/フォームデータ;私はこれを行う方法を取得することはできません。私はたくさんの質問を見てきましたが、JSONにファイルとそのファイルを投稿する方法は見つかりませんでした。

+0

? –

+0

@WalterPalladino unfortunatly私はサーバー側で何も処理しません。 –

+0

私のために働いているコードをいくつか追加しました。それがあなたを助けることを願ってください。私の場合、バックエンドはPHPです。 –

答えて

0

これは私がバックエンドにPOSTを送信するために使用している一般的な方法である:

/** 
* putJSONObject 
* 
* @param url 
* @param jsonObject 
* @param timeoutMillis 
* @return 
*/ 
protected static JSONObject putJSONObject (String url, JSONObject jsonObject, int timeoutMillis) throws IOException, JSONException { 

    StringBuilder stringBuilder = new StringBuilder(); 

    HttpURLConnection httpURLConnection; 
    DataOutputStream printout; 

    httpURLConnection = (HttpURLConnection) new URL (url).openConnection(); 
    httpURLConnection.setRequestMethod ("POST"); 
    httpURLConnection.setReadTimeout (timeoutMillis); 
    httpURLConnection.setConnectTimeout (timeoutMillis); 
    httpURLConnection.setDoInput (true); 
    httpURLConnection.setDoOutput (true); 
    httpURLConnection.setUseCaches (false); 
    httpURLConnection.connect(); 

    // Send POST output. 
    printout = new DataOutputStream (httpURLConnection.getOutputStream()); 
    printout.writeBytes ("msg=" + URLEncoder.encode (jsonObject.toString(), "UTF-8")); 
    printout.flush(); 
    printout.close(); 

    InputStreamReader inputStreamReader = new InputStreamReader (httpURLConnection.getInputStream()); 

    int read; 
    char[] buff = new char[4096]; 
    while ((read = inputStreamReader.read (buff)) != -1) { 
     stringBuilder.append (buff, 0, read); 
    } 
    httpURLConnection.disconnect(); 

    return new JSONObject (stringBuilder.toString()); 

} 

JSONたmsg

として、これは文字列に画像を符号化するために送られ、送信されました私のコード:

/** 
* toBase64 
* 
* @param bitmap 
* @return String 
*/ 
public static String toBase64 (Bitmap bitmap) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    byte[] imageBytes = baos.toByteArray(); 
    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 
    return encodedImage; 
} 

/** 
* fromBase64 
* 
* @param encodedImage 
* @return Bitmap 
*/ 
public static Bitmap fromBase64 (String encodedImage) { 
    byte[] decodedByte = Base64.decode(encodedImage, Base64.DEFAULT); 
    return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length); 
} 

希望します。

0

まず、アプローチを変更する必要があります。 JSONオブジェクトを送信する前に、イメージ(ファイル)をアップロードサーバーにロードする必要があります。あなたがあなたのイメージを保存し、参照によってそれにアクセスできるサーバーです。 これは、multipart/form-dataを使用してイメージをサーバーにアップロードし、イメージへのリンクを取得するように見えます。そして、あなたは、あなたが使用してアップロードサーバにデータをアップロードする方法を説明しますが、stackoverflowのに

いくつかのリンクをしたいすべてのJSONオブジェクトを行うことができます

{ 
    id: 123, 
    user: { logo: https://myuploadserver.com/img123.jpg } 
} 

のようなあなたのJSONオブジェクトには、このリンクを置きますマルチパート/フォームデータ:あなたはバックエンド側でそれを解析するために使用している言語

1. simple HttpURLConnection POST file multipart/form-data
2. upload multipart form data to server

関連する問題