You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:27:02