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

时间:2017-01-03 01:25:00

标签: java spring media-type

我无法找到从我的服务器下载后mp3文件与以前保存的原始文件不同的原因。

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

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

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

为什么使用HTTP传递会使我的文件失真? mediaTypes应该强制执行某些编码吗? (“audio / mpeg”mediaType和没有它的情况没有区别。)

1 个答案:

答案 0 :(得分:2)

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

您可能需要查看此处,看起来您的问题非常相似:Spring MVC: How to return image in @ResponseBody?