从服务器下载的文件与之前保存的原始文件不同

Downloaded file from server is different than original one saved previously

我无法找出为什么从我的服务器下载后的 mp3 文件与之前保存的原始文件不同。

这是我的控制器方法。文件的内容(byte[] 内容)在此阶段与原始文件相同——原始文件与从数据库中检索的文件相同(在调试器中检查)。

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

这是文件的不同之处(左边是原始文件):

为什么使用 HTTP 传递会扭曲我的文件? mediaTypes 是否应该强制执行某些编码? (有 "audio/mpeg" mediaType 和没有它没有区别)。

如果您设置 produces = "application/octet-stream" 属性 (MediaType.APPLICATION_OCTET_STREAM),它应该可以工作。否则,您将被 Spring 的转换器框架所困。

你可能想看看这里,看来你的问题很相似:Spring MVC: How to return image in @ResponseBody? .