1

私は1つのAndroidアプリケーションを開発しており、アプリケーションで画像データをサーバーに送信したいと考えています。だから私はプットリクエストを使用しています。jsonオブジェクトで画像データを送信したくありません。HTTP put リクエストの本文として画像データを送信したいだけです。また、ヘッダー コンテンツの長さも設定したいと考えています。ということで以下の方法でやってみました。

@Override
      protected Void doInBackground(Void... unused) {

         HttpClient hc = new DefaultHttpClient();
            String message;
            HttpPut p = new HttpPut("abc.com");

            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            bitmap.compress(CompressFormat.JPEG, 100, bos);
            byte[] data = bos.toByteArray();


    try {

              p.setEntity(new StringEntity(data.toString()));
              p.setHeader("Content-Length", Long.toString(data.length));
                //p.setHeader("Content-Length", "0");

                HttpResponse resp = hc.execute(p);
                if (resp != null) 
                {
                    if (resp.getStatusLine().getStatusCode() == 204)
                    {

                    }
                }

                Log.d("Status line", "" + resp.getStatusLine().getStatusCode());
            } catch (Exception e) {
                e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Void... unsued) {

    }

    @Override
    protected void onPostExecute(Void result) {
        try {
            if (dialog.isShowing())
                dialog.dismiss();
            Log.i("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "before exception "+result);

        } catch (Exception e) {
            Log.i("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "inside catch ");
            Toast.makeText(getApplicationContext(),"Error"+e,
                    Toast.LENGTH_LONG).show();
            Log.e(e.getClass().getName(), e.getMessage(), e);
        }
    }
}

ですから、私の心には2つの不明な質問があります。1) マルチパートを使用せず、json オブジェクトを使用せずに画像データをサーバーに送信したい。リクエストの本文に設定するだけです。どうやってするか?2) ヘッダー部分にコンテンツの長さを設定したい。どうやってするか?コンテンツの長さを設定しようとすると、システムエラーが発生しますclient protocol exception

これらの 2 つの質問に関するヘルプが必要です。ありがとうございました。

4

1 に答える 1

0

上記のコメンターの 1 人として、byte[] を String に変更したくないでしょう。送信しようとしている画像が破損する可能性が最も高いです(私は自分で試しました)。

代わりに (StringEntity ではなく) ByteArrayEntity を使用してみてください。

p.setEntity(new ByteArrayEntity(data));
于 2013-11-22T23:37:00.297 に答える