web-dev-qa-db-ja.com

Feignを使用したファイルのアップロード-multipart / form-data

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--

マルチパート境界の生成を含め、リクエスト本文を手動で作成する必要がありますか?このクライアントができる他のすべてを考えると、それは少し過剰に思えます。

8
btidwell

いいえ、しません。プロキシインターフェイスメソッドの種類を定義し、コンテンツタイプを次のように指定する必要があります: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を使用したファイルのアップロード

4
NangSaigon

すでにSpringWebを使用している場合は、マルチパートリクエストを作成できるFeignEncoderの実装を試すことができます。単一のファイル、ファイルの配列、および1つ以上の追加のJSONペイロードを送信できます。これが私の テストプロジェクト です。 Springを使用しない場合は、FeignSpringFormEncoderのencodeRequestメソッドを変更してコードをリファクタリングできます。

1
pcan

Spring Boot 2およびspring-cloud-starter-openfeignの場合、次のコードを使用します。

@PostMapping(value="/upload", consumes = "multipart/form-data" )
QtiPackageBasicInfo upload(@RequestPart("package") MultipartFile package);

偽のクライアント呼び出しで@RequestParamを@RequestPartに変更して機能させる必要があります。また、@ PostMappingにコンシューマーを追加する必要があります。

0
MBozic