1

マルチパートリクエストを作成したとします。ここで、コンテンツ ID をアドバタイズする必要があります。以下は、マルチパート リクエストを作成するために使用しようとしていたコードです。

MultipartEntity mpEntity = new MultipartEntity();
StringBody body;
try
{
    body = new StringBody( xml, "application/xml", Charset.forName( "UTF-8" ) );
    byte[] data = getBytesFromFile( image );
    ByteArrayBody bab = new ByteArrayBody( data, "image/jpeg", "test_image_cid" );
    mpEntity.addPart( "body", body );
    mpEntity.addPart( "test_image_cid", bab );

} catch ( UnsupportedEncodingException e )
{
    e.printStackTrace();
}

HttpPost request = new HttpPost("http://10.1.1.1");
request.addHeader( "Authorization", authorization_header_values );
request.addHeader( "Content-Type", "Multipart/Related" );
request.setEntity( mpEntity );
return request;

これは、呼び出している Web サービスが要求したものです。

<?xml version="1.0" encoding="utf-8"?> <request method="receipt.create"> 
   <receipt>
       <expense_id>1</expense_id>  <!-- id of expense -->
       <image>cid:xxxxxxxxxxxxx</image> <!-- content-id used on the related binary content -->
   </receipt>
</request>

これは、デバッグのためにサーバーから返されたものです。

POST / HTTP/1.1 承認: OAuth realm=""、oauth_version="1.0"、oauth_consumer_key="key"、oauth_token="token"、oauth_timestamp="1358197676614"、oauth_nonce="1111111"、oauth_signature_method="PLAINTEXT"、oauth_signature ="署名" Content-Type: Multipart/Related User-Agent: エージェント Content-Length: 2336363 Host: 10.1.1.1 Connection: Keep-Alive

--HPeiFlrswQmM8Mi1uoWpzJRfrnp3AMtZjpCdt コンテンツの性質: フォーム データ。name="body" Content-Type: アプリケーション/xml; charset=UTF-8 Content-Transfer-Encoding: 8bit

<?xml version='1.0' encoding='UTF-8' ?>
    <request method="receipt.create">
        <receipt>
            <expense_id>979</expense_id>
            <image>cid:test_image_cid</image>
        </receipt>
    </request>

--HPeiFlrswQmM8Mi1uoWpzJRfrnp3AMtZjpCdt コンテンツの性質: フォーム データ。name="test_image_cid"; filename="test_image_cid" Content-Type: image/jpeg Content-Transfer-Encoding: バイナリ

このリクエストに Content-ID を追加する方法を見つけようとしています。この呼び出しに欠けている明らかなものはありますか? このリクエストを作成する別の方法はありますか? アドバイスをありがとう!

4

1 に答える 1

4

Content-Id やその他のフィールドを追加するには、FormBodyPart を使用する必要があります。簡単に言えば、これらの行を分割します。

ByteArrayBody bab = new ByteArrayBody( data, "image/jpeg", "test_image_cid" );
mpEntity.addPart( "body", body );

これらの行に:

ByteArrayBody bab = new ByteArrayBody( data, "image/png", "byte_array_image" );
FormBodyPart fbp = new FormBodyPart( "form_body_name", bab );
fbp.addField( "Content-Id", "ID_GOES_HERE" );
mpEntity.addPart( fbp );

そして、それはあなたのためにそれをするはずです!

于 2013-01-15T15:16:22.397 に答える