AWS Lambda函数无法正常读取/tmp目录下文件问题
问题排查与解决方案
可能原因及修复方法
1. 文件权限不足
Lambda的/tmp目录默认权限为700,文件保存后可能因权限设置导致ResumeParser无法读取。
- 修复:保存文件后手动调整权限:
resume.save(file_path) os.chmod(file_path, 0o644) # 赋予文件可读权限
2. 文件未完全写入磁盘
Lambda的磁盘IO可能存在延迟,save方法返回时文件可能还未完成写入。
- 修复:用显式文件操作确保内容写入磁盘:
with open(file_path, 'wb') as f: f.write(resume.read()) f.flush() os.fsync(f.fileno()) # 强制刷新到磁盘
3. ResumeParser路径处理逻辑问题
自定义的ResumeParser可能存在路径硬编码(比如默认从项目根目录加载),或未正确解析绝对路径。
- 修复:
- 检查
ResumeParser源码,确保它支持完整绝对路径作为输入。 - 实例化前打印路径确认正确性:
print(f"Target file path: {os.path.abspath(file_path)}")
- 检查
4. 文件名/扩展名被错误修改
secure_filename可能会过滤或修改文件名,导致ResumeParser无法识别文件类型。
- 修复:打印处理后的文件名和路径,确认扩展名完整:
print(f"Final file name: {file_name}, path: {file_path}")
5. 文件内容验证
确认保存到/tmp的文件并非空文件:
- 修复:保存后立即读取文件内容对比大小:
resume.save(file_path) with open(file_path, 'rb') as f: print(f"File size after save: {len(f.read())}") # 和上传文件大小对比
额外调试建议
- 在Lambda控制台开启详细日志,在
ResumeParser的关键步骤(如文件打开、内容读取)添加日志输出,定位具体失败环节。 - 用同一测试文件分别在本地根目录和
/tmp目录测试,对比ResumeParser的处理流程差异。
内容的提问来源于stack exchange,提问作者Siddharth Bhansali
相关产品推荐
相关产品推荐

