Downloaded file from server is different than original one saved previously

307 views Asked by At

I cannot find out why the mp3 file is different after download from my server than original one saved previously there.

This is my controller method. The content of file (byte[] content) is identical with original file on this stage - the original file is the same as file retrieved from database (checked in debugger).

    @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);
    }

This is how files differ (the left is original one): enter image description here

Why passing using HTTP distors my file? Should mediaTypes enforce certain encoding? (there was no difference with "audio/mpeg" mediaType and without it).

1

There are 1 answers

2
thst On BEST ANSWER

It should work, if you set the produces = "application/octet-stream" attribute (MediaType.APPLICATION_OCTET_STREAM). Otherwise, you are trapped by Spring's converter framework.

You may want to have a look here, seems your problem is very similar: Spring MVC: How to return image in @ResponseBody? .