2017-01-03 5 views
0

以前に保存されていた元のファイルよりも、私のサーバからダウンロードした後にmp3ファイルが異なる理由がわかりません。サーバからダウンロードしたファイルが以前に保存された元のファイルと異なっています

これは私のコントローラメソッドです。ファイルの内容(バイト[]の内容)は、この段階で元のファイルと同じです。元のファイルはデータベースから取得したファイルと同じです(デバッガでチェックインされています)。

@ResponseBody 
    @RequestMapping(method = RequestMethod.GET, value = "/{sampleId}/file") 
    public HttpEntity<byte[]> getFile(@PathVariable Long sampleId) { 
     ResourceEntity resourceEntity = testSampleRepository.getFile(sampleId); 
     byte[] content = resourceEntity.getContent(); 
     String fileName = resourceEntity.getFileName(); 
     HttpHeaders header = new HttpHeaders(); 
     header.setContentType(new MediaType("audio", "mpeg")); 
     header.set(HttpHeaders.CONTENT_DISPOSITION, 
       "attachment; filename=" + fileName.replace(" ", "_")); 
     header.setContentLength(content.length); 
     return new HttpEntity<byte[]>(content, header); 
    } 

これは、ファイルは(左が1つのオリジナルである)どのように異なるかです: enter image description here

HTTPを使用して渡すと、私のファイルをdistorsなぜ? mediaTypesは特定のエンコーディングを強制する必要がありますか? (「audio/mpeg」mediaTypeとの違いはありませんでした。

+0

あなたのメディアの種類が間違っていると思います。オーディオ/ mpeg3を試してください。https://www.sitepoint.com/web-foundations/mime-types-complete-list/ –

+4

ファイルをダウンロードするコードを表示する必要があります。あなたはどちらがオリジナルであり、どれがダウンロードされたものかを言う必要があります。その外観から、正しいファイルにはASCIIのみの文字が含まれているので、base64でエンコードされています(HTTP接続では不要ですが) –

+0

@ErwinBolwidt Base64はFORM POSTの 'multipart/form-data'アップロードする。 – Andreas

答えて

2

produces = "application/octet-stream"属性(MediaType.APPLICATION_OCTET_STREAM)を設定するとうまくいくはずです。それ以外の場合は、Springのコンバータフレームワークによってトラップされます。

あなたはここを見てみたいですが、あなたの問題は非常によく似ているようです:Spring MVC: How to return image in @ResponseBody?

+0

ありがとうございます。 @ResponseBodyを追加して作成した後、それがなくても奇妙な例外が発生しています。つまり、HttpMediaTypeNotAcceptableException:受け入れ可能な表現が見つかりませんでした。 – Milso

+0

解決済みのHttpMediaTypeNotAcceptableException:RepositoryRestControllerの代わりに単純なController/RestController(Spring Data Restリポジトリのカスタマイズ)を使用する必要があります。 – Milso

関連する問題