8

私はJacksonと組み合わせてApache CXFを使用してJSONファイルを消費および生成するWebサービスで働いています。
ただし、サービスのメソッドの 1 つは、私の Web サービスに multipart/form-data POST 要求を行うモバイル アプリケーションからアップロードされた画像を保存できる必要があります。環境。通常、JSON を使用して生成するために "Request" オブジェクトと "Response" オブジェクトを作成しますが、残念ながら、このケースではうまくいきません。

リクエストの形式は次のとおりです。

Content-type: multipart/form-data
"Description": text/plain
"Path": text/plain
"Image": image/jpeg

この種のリクエストを正しく消費し、サーバー側で画像を保存するにはどうすればよいですか?


[編集]

これを使用して multipart/form-data を消費することができました:

public returnType savePicture(
                @Multipart(value = "mode", type = "text/plain") String mode,
                @Multipart(value = "type", type = "text/plain") String type,
                @Multipart(value = "path", type = "text/plain") String path
                @Multipart(value = "image", type = "image/jpeg") Attachment image
            ) 
    {

ただし、次の POST リクエストを使用しようとすると:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x
content-disposition: form-data; name="mode"

T
--AaB03x
content-disposition: form-data; name="type"

M
--AaB03x
content-disposition: form-data; name="path"

c:/img/
--AaB03x
content-disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg
Content-Transfer-Encoding: binary

imgdata
--AaB03x--

次のエラーが表示されます。

javax.ws.rs.BadRequestException: org.apache.cxf.jaxrs.utils.multipart.MultipartReadException: コンテンツ IDタイプのマルチパートが見つかりません。リクエスト コンテンツ タイプ: multipart/form-data;boundary=AaB03x

たとえば、modeのみを消費すると、正常に動作します。2つ以上のパラメータでのみ壊れます。なぜそれが間違っているのですか?

4

3 に答える 3

0

問題が見つかったようで、リクエストの形式に関連していました。正しい形式は次のとおりです。

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x
content-disposition: form-data; name="mode"

T--AaB03x

content-disposition: form-data; name="type"

M--AaB03x

content-disposition: form-data; name="path"

c:/img/--AaB03x

content-disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg
Content-Transfer-Encoding: binary

imgdata--AaB03x--

この形式に変更すると、他のパラメーターを使用できるようになりました。

于 2013-03-21T19:18:07.917 に答える
0

マルチパートフォームデータを消費するため。@consumes タグを使用し、「multipart/form-data」を次のような値パラメータとともに提供します

@Consumes(value = "マルチパート/フォームデータ")

参照 https://jnorthr.wordpress.com/2012/07/10/http-header-content-type-and-encodings/

于 2015-06-16T04:48:17.737 に答える