Android で Jersey Client API を使用した Multipart-form-data POST リクエストに問題があります。私はウェブ上のさまざまな例に従ってきましたが、実装に関してはすべてかなり似ています。
Client client = createClientInstance();
WebResource r = client.resource(BASEURL).path("DataUpload");
ClientResponse post;
try {
FormDataMultiPart multiPart = new FormDataMultiPart();
multiPart.field("account", account);
multiPart.field("checksum", checksum);
multiPart.bodyPart(new FileDataBodyPart("file", file, MediaType.APPLICATION_OCTET_STREAM_TYPE));
post = r.type(MediaType.MULTIPART_FORM_DATA)
.accept(MediaType.TEXT_PLAIN)
.post(ClientResponse.class, multiPart);
} catch (ClientHandlerException e) {
Log.e(TAG, e.getLocalizedMessage());
} finally {
client.destroy();
}
デバイスでこのコードを実行すると、例外が表示されます。
javax.ws.rs.WebApplicationException: java.lang.IllegalArgumentException: No MessageBodyWriter for body part of type 'java.io.File' and media type 'application/octet-stream'
Jersey は、追加の構成なしで File オブジェクトを処理することになっていると思いました。bodypart 行を削除すると、Jersey は要求を行うことができますが、それはこのポイントを排除します。
ビルドパスにこれらのライブラリがあります (これらは Maven で取り込まれました)。
- ジャージ-クライアント-1.14
- ジャージコア-1.14
- ジャージ-マルチパート-1.14
- mimepull-1-6