AWS SES部署EC2时文件/目录找不到问题排查
问题分析与解决方案
问题根源
- 你的代码中使用
FileDataSource(at)加载附件,本地环境传入的是Windows本地路径(C:\Users开头),但EC2是Linux系统,既没有对应的路径,也不存在这些本地文件,因此触发"文件/目录未找到"错误。 - 当前代码仅支持本地文件路径,无法直接处理URL形式的附件源。
修改方案(支持URL加载附件)
修改Service中附件处理的逻辑,将本地文件数据源替换为URL数据源,直接从指定URL读取文件内容作为附件:
修改后的附件处理代码
if(attach != null){ for (String urlStr : attach){ MimeBodyPart att = new MimeBodyPart(); try { URL url = new URL(urlStr); // 使用URLDataSource直接加载URL资源 DataSource dataSource = new URLDataSource(url); att.setDataHandler(new DataHandler(dataSource)); // 从URL中提取文件名,可根据实际URL格式调整截取逻辑 String fileName = urlStr.substring(urlStr.lastIndexOf('/') + 1); // 如果URL包含参数,去掉参数部分 if(fileName.contains("?")){ fileName = fileName.split("\\?")[0]; } att.setFileName(fileName); msg.addBodyPart(att); } catch (MalformedURLException e) { throw new IllegalArgumentException("无效的附件URL: " + urlStr, e); } catch (IOException e) { throw new RuntimeException("读取附件URL失败: " + urlStr, e); } } }
额外注意事项
- 网络连通性:确保EC2服务器能访问目标URL。如果是私有资源(比如AWS S3私有对象),需要给EC2实例配置对应的IAM权限,或者在URL中携带有效签名。
- URL格式:传入的
attachList必须是合法的URL(如https://example.com/files/report.pdf),不能再使用本地文件路径。 - 异常处理:新增的URL相关异常(如格式错误、读取失败)要针对性处理,避免笼统的异常捕获导致问题排查困难。
内容的提问来源于stack exchange,提问作者Heidi
相关产品推荐
相关产品推荐

