2017-10-10 3 views
0

私のDBのBlobとして保存されているイメージをMultipartFileに変換して、リクエストされたときにクライアントに返すようにしようとしています。私は[]バイトとしてブロブを取得し、私はそれをこのようにやろうとしているクライアントへ戻るテストクラスの外でorg.springframework.mock.web.MockMultipartFileをインポートできません

を提供するためにMultipartFileに変換しようとしている:https://stackoverflow.com/a/25820543/7082628

しかし、IntelliJのは、私に言っていますimport org.springframework.mock.web.MockMultipartFile
これはテストクラスでは問題なくインポートできますが、テストクラス外ではインポートできません。ここでそれをすることはできますか?

また、別の一般的な回答に記載されているように、私自身のバージョンのMultipartFileでクラスを実装することでこれを試みましたが、それは私にそれがserialzerを見つけることができないと言います。

提案がありますか?

+0

をBLOBにダウンロードリンクを提供することができます方法です。 'OutputStream'を使って' byte [] 'をクライアントに直接ストリームするだけです。 –

+0

@M。 Deinum - どうですか?あなたの肉体は答えを出すことができますか? – NateH06

答えて

1

あなたのアプローチにはいくつか問題があります。

  1. MultipartファイルはHTTP Request形式とresponseするためのものではありません。
  2. あなたがしなければならないことは、ファイルをresponse.getOutputStream()に書き込むことです。どの方法が簡単になるSpring

MockMultipartFileをインポートできないというご質問にお答えします。これは、Mavenを使用し、依存関係(おそらくspring-boot-starter-test)がscopetestに設定されているために発生している可能性があります。

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-test</artifactId> 
    <scope>test</scope><!-- CHANGE THIS TO "runtime" --> 
</dependency> 

もう一度言いましたが、これを行う必要はありません。応答を提供するときには、Multipartを考慮する必要はありません。ファイルをアップロードするプロトコルです。ここで

はそれが唯一のテストのためであるとして、あなたがそれを使用しないでくださいあなたは春

@GetMapping(path = "download") 
public ResponseEntity<Resource> download(String param) throws IOException { 

    InputStreamResource resource = new InputStreamResource(/* InputStream of blob */); 

    long fileLength = /*Length of content, bytes.length or something */ 

    return ResponseEntity.ok() 
      .contentLength(fileLength) 
      .contentType(MediaType.APPLICATION_OCTET_STREAM_VALUE) 
      .body(resource); 
} 
+0

ええと、Imageは、クライアントに返される必要があるさまざまなフィールド(名前、電子メール、アドレスなど)を含むDTOの1つのフィールドであるため、このアプローチでやっていると思います。イメージは、そのDTOの一部です。私は新しいタイプのDTOを作ることができましたが、イメージをフィールドとして格納して、クライアント側で処理する必要がありました。どのように私はそのアプローチを変更することができますか? – NateH06

+0

OK、クライアントブラウザベースですか?もしそうでなければ、あなたは脱直列化のために何を使用していますか? – 11thdimension

+0

この特定のチャレンジの要件は、クライアントが必要とするものを述べていません。私はそれがブラウザベースであると仮定しているので、@ResponseBodyの中の記入済みのDTOをテンプレートに渡しています。おそらく別の方法がありますか? – NateH06

関連する問題