javax.mail读取拆分文件名时part.getFileName()返回null的解决方案问询
问题根因与解决方法
该问题由javax.mail 1.6.x版本默认未开启RFC 2231规范的长文件名分段解析能力导致,不需要手动解析Content-Disposition字段,可通过以下方案解决:
- 方法1:配置JavaMail参数开启自动解析
可以在创建Session时传入对应参数,无需修改全局系统配置,配置完成后直接调用part.getFileName()即可拿到合并后的完整文件名,示例代码如下:Properties mailProps = new Properties(); // 开启RFC 2231参数解码支持 mailProps.setProperty("mail.mime.decodeparameters", "true"); // 开启长分段参数自动合并 mailProps.setProperty("mail.mime.decodelongparameters", "true"); Session mailSession = Session.getInstance(mailProps); - 方法2:单独调用ContentDisposition工具类解析
如果无法修改Session的全局配置,可以单独对单个Part的Content-Disposition字段进行解析,示例代码如下:String[] dispHeaders = part.getHeader("Content-Disposition"); if (dispHeaders != null && dispHeaders.length > 0) { ContentDisposition contentDisposition = new ContentDisposition(dispHeaders[0]); // 需确保当前上下文已开启参数解码配置即可自动合并分段文件名 String fileName = contentDisposition.getParameter("filename"); }
内容的提问来源于stack exchange,提问作者Kim Limbrick
相关产品推荐
相关产品推荐

