使用ByteArrayResource下载.msg文件的正确MIME类型问题
解决application/vnd.ms-outlook类型文件下载后缀为.msg的问题
你需要在生成下载文件名时,手动添加MIME类型到文件后缀的映射逻辑——因为application/vnd.ms-outlook对应的标准文件后缀是.msg,默认逻辑会错误地把MIME类型的后半段当成后缀,导致生成.vnd.ms-outlook这类无效后缀。
具体实现示例:
- 定义MIME类型与后缀的映射表:
// 可放在工具类或当前业务类中 private static final Map<String, String> MIME_TO_EXTENSION = new HashMap<>(); static { // 针对Outlook邮件添加专属映射 MIME_TO_EXTENSION.put("application/vnd.ms-outlook", ".msg"); // 按需添加其他需要自定义映射的MIME类型 }
- 在生成下载文件名时替换后缀:
// 获取S3返回的Content-Type String contentType = storageResult.getContentType(); // 优先用自定义映射,无匹配则用默认逻辑生成后缀 String fileExtension = MIME_TO_EXTENSION.getOrDefault(contentType, getDefaultExtension(contentType)); // 拼接最终下载文件名 String downloadFileName = "testFile" + fileExtension;
- 可选:实现默认后缀生成逻辑(处理常规MIME类型)
private String getDefaultExtension(String contentType) { if (contentType == null) { return ".bin"; } String[] typeParts = contentType.split("/"); return typeParts.length == 2 ? "." + typeParts[1] : ".bin"; }
这样当storageResult.getContentType()返回application/vnd.ms-outlook时,生成的文件名就会是testFile.msg,满足直接打开邮件内容的需求。
内容的提问来源于stack exchange,提问作者sunny-java-dev
相关产品推荐
相关产品推荐

