2

以前も同じようなことを質問したのですが、元の投稿を読み直すと、私が本当に質問していることを理解するのは簡単ではありませんでした。次のような状況があります。ファイル、一連の「既知の」メタデータ値 (およびそれらは常にそこにある) を取り込むカスタム ファイル アップロード プロシージャがあります (または、少なくとも私は作業を開始しようとしています)。追加のメタデータ値の数。現在存在するサービスは、ジャージー フレームワーク (1.16) を使用します。

現在、ファイルのアップロード部分と既知のメタデータ値を処理するクライアント コードとサーバー コードの両方があります (以下のサーバー コード)。

@POST
@Path("asset/{obfuscatedValue0}/")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public UUID uploadBlob(@PathParam("obfuscatedValue0") Integer obfuscatedValue0,
    @FormDataParam("obfuscatedValue1") String obfuscatedValue1, 
    @FormDataParam("obfuscatedValue2") String obfuscatedValue2, 
    @FormDataParam("obfuscatedValue3") String obfuscatedValue3,
    @FormDataParam("obfuscatedValue4") String obfuscatedValue4, 
    @FormDataParam("obfuscatedValue5") String obfuscatedValue5,
    @FormDataParam("file") InputStream uploadedInputStream) {
.....
}

...そしてクライアントコードの抜粋:

Builder requestBuilder = _storageService
.path("asset")
.path(obfuscatedValue0.toString())
.type(MediaType.MULTIPART_FORM_DATA)
.accept(MediaType.APPLICATION_JSON);

FormDataMultiPart part = new FormDataMultiPart()
.field("file", is, MediaType.TEXT_PLAIN_TYPE) // 'is' is an inputstream from earlier in code.
.field("obfuscatedValue1", obfuscatedValue1)
.field("obfuscatedValue2", obfuscatedValue2)
.field("obfuscatedValue3", obfuscatedValue3)
.field("obfuscatedValue4", obfuscatedValue4)
.field("obfuscatedValue5", obfuscatedValue5);

storedAsset = requestBuilder.post(UUID.class, part);

ただし、不明な数の値/名前を持つ追加パラメーターのマップを渡す必要があります。私が見てきたことから、前の例のように FormDataParam 注釈を使用してこれを行う簡単な方法はありません。

Jersey ファイルのアップロードに関連するさまざまなインターネット検索に基づいて、コンテンツ タイプを "application/x-www-form-urlencoded" に設定して MultivaluedMap を使用するように変換しようとしました。

@POST
@Path("asset/{value}/")
@Consumes("application/x-www-form-urlencoded")
public UUID uploadBlob(@PathParam(value), MultivaluedMap<String,String> formParams) {
....
}

MultivaluedMap は、フォーム パラメータの一般的なマップを取得することを目的としていることを理解しています (そのため、 @FormDataParam アノテーションを持つ同じメソッドでうまく連携することはできません)。このすべての情報をクライアントから何らかのマップ内に渡すことができれば、マップを解析して取得し、データに対して「doMagic()」を実行して、やりたいことを実現する方法を理解できると思います。私はそこに問題があるとは思わない。

私がかなり混乱しているのは、ジャージー フレームワーク内でこの 2 番目の方法を使用するときに、リクエストのクライアント側コードをフォーマットする方法です。誰かが状況についてのガイダンス、または続行方法に関する提案を提供できますか? ここで提案されたソリューションを試して、この状況に対処するカスタム xml アダプターを開発し、multipart-form-data の代わりに xml を送信することを検討していますが、これが必要な InputStream 値とどのように相互作用するかまだ混乱しています。合格した。私が見た MultivaluedMap の例は、文字列データのみを扱っているようです。

4

0 に答える 0