Feignを使用してマルチパートファイルのアップロードを実行しようとしていますが、その良い例がどこにも見つからないようです。基本的に、HTTPリクエストは次のようになります。
...
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="name"
Larry
--AaB03x
Content-Disposition: form-data; name="file"; filename="file1.txt"
Content-Type: text/plain
... contents of file1.txt ...
--AaB03x--
あるいは...
------fGsKo01aQ1qXn2C
Content-Disposition: form-data; name="file"; filename="file.doc"
Content-Type: application/octet-stream
... binary data ...
------fGsKo01aQ1qXn2C--
マルチパート境界の生成を含め、リクエスト本文を手動で作成する必要がありますか?このクライアントができる他のすべてを考えると、それは少し過剰に思えます。
いいえ、しません。プロキシインターフェイスメソッドの種類を定義し、コンテンツタイプを次のように指定する必要があります:multipart/form-dataおよびリモートAPIに必要なパラメーターなどの他の情報。次に例を示します。
public interface FileUploadResource {
@RequestLine("POST /upload")
@Headers("Content-Type: multipart/form-data")
Response uploadFile(@Param("name") String name, @Param("file") File file);
}
完成した例はここにあります: Open Feignを使用したファイルのアップロード
すでにSpringWebを使用している場合は、マルチパートリクエストを作成できるFeignEncoderの実装を試すことができます。単一のファイル、ファイルの配列、および1つ以上の追加のJSONペイロードを送信できます。これが私の テストプロジェクト です。 Springを使用しない場合は、FeignSpringFormEncoderのencodeRequestメソッドを変更してコードをリファクタリングできます。
Spring Boot 2およびspring-cloud-starter-openfeignの場合、次のコードを使用します。
@PostMapping(value="/upload", consumes = "multipart/form-data" )
QtiPackageBasicInfo upload(@RequestPart("package") MultipartFile package);
偽のクライアント呼び出しで@RequestParamを@RequestPartに変更して機能させる必要があります。また、@ PostMappingにコンシューマーを追加する必要があります。