从Amazon S3读取JPG文件时触发PIL.UnidentifiedImageError问题求助
解决boto3读取S3 JPG文件时的PIL.UnidentifiedImageError报错
环境版本
- boto3: 1.28.3
- botocore: 1.31.65
原代码
#boto3 version = 1.28.3 #botocore version = 1.31.65 import boto3 from PIL import Image from io import BytesIO s3 = boto3.client('s3') new_obj = s3.get_object(Bucket=bucket, Key="path/to/image_folder/image_3.jpg") image_dl = new_obj['Body'].read() image = Image.open(BytesIO(image_dl))
报错信息
PIL.UnidentifiedImageError: Cannot identify image file
解决建议
- 验证S3对象完整性:通过AWS控制台手动下载该JPG文件,确认文件是否损坏。若文件本身损坏,重新上传正确文件即可。
- 检查S3对象Key路径:确认
path/to/image_folder/image_3.jpg完全正确,注意大小写、必须使用正斜杠/,避免因路径错误下载到非图片文件。 - 确认文件真实格式:部分文件扩展名是
.jpg但实际并非JPG格式,可通过系统工具查看文件真实类型,若格式不符需替换为正确的JPG文件。 - 校验下载字节流:对比S3控制台显示的对象大小与
len(image_dl)是否一致,若不一致说明下载过程数据丢失,可重试下载或检查网络连接。 - 改用流式处理:避免先读取全部字节,直接使用S3对象流打开图片,代码示例:
new_obj = s3.get_object(Bucket=bucket, Key="path/to/image_folder/image_3.jpg") image = Image.open(new_obj['Body']) - 升级Pillow库:旧版本Pillow可能对部分JPG编码支持不足,执行
pip install --upgrade pillow升级后重试。
内容的提问来源于stack exchange,提问作者data_person
相关产品推荐
相关产品推荐

