下载时少数内容类型的文件扩展名发生更改

问题描述 投票:0回答:2

我现在使用下面的方法从服务器下载文件,对于一些带有扩展名的文件(“.png”,“.txt”,“.pdf”),文件下载正确,但至于(“.exe”)文件正在下载为 f.txt 我可以知道这段代码有什么问题吗?对于 .exe 文件,内容正在写入“f.txt”文件。我还使用 Files.probeContentType(file.toPath()); 来确定媒体类型并将其设置为响应实体的内容类型。提前致谢! :)。 扩展名更改为 application/x-msdownload

的媒体类型
        public ResponseEntity<InputStreamResource> getFileFromDisk(String filename) throws IOException {
            ResponseEntity<InputStreamResource> filedata = null;
            String file_path = "/e:/filesfolder/" + filename;
            String fileType = "Undetermined";
            final File file = new File(file_path);
            fileType = Files.probeContentType(file.toPath());
            System.out.println(fileType);
            InputStreamResource resource = new InputStreamResource(new FileInputStream(file_path));
            String file_checksum = checksumcalc.calculateChecksum(file_path);
            filedata = ResponseEntity.ok().header("Md5", file_checksum)
                    .contentType(MediaType.parseMediaType(fileType)).body(resource);
            return filedata;
        }
java spring spring-mvc spring-boot
2个回答
3
投票

为了避免

f.txt
问题,您必须定义
Content-disposition
标头来指定附件的文件名。

例如:

filedata = ResponseEntity.ok()
    .header("Content-disposition", "attachment; filename=" + fileName)
    .header("Md5", file_checksum)
    .contentType(MediaType.parseMediaType(fileType)).body(resource);

0
投票

@托马斯 我知道我不应该发布任何对答案没有帮助的内容。 但是请问你从哪里得到的(你是如何获得必须更改标题的信息的),因为你的简单答案解决了我的问题(与OP有同样的问题)。 我需要一个好的来源,这样我总是在 stackoverflow 上搜索,很多时候它没有帮助(或者我不知道如何用谷歌搜索一些东西)

© www.soinside.com 2019 - 2024. All rights reserved.