RT,使用requests访问图片路径http://bj.ganji.com/tel_img/?c=k92KKw9N.WvtNlfkE.6cE0wPqQPPtQyX,然后直接使用bucket.put_object(oss_addr, input)保存requests返回的input,但是保存的时候报错,错误信息'utf8' codec can't decode byte 0xd7 in position 20: invalid continuation byte,请大神支招,急!!!!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这个错误信息表明你在尝试使用UTF-8编码解码一个字节流,而这个字节流中包含了一些不是有效UTF-8序列的字节。在你的场景中,你尝试将从网络请求得到的数据直接保存到阿里云OSS(对象存储服务)上时遇到了问题。
当你使用requests.get()获取图片内容时,实际上获取的是二进制数据,而不是文本数据,因此不应该尝试用字符串编码(如UTF-8)来处理它。在调用bucket.put_object()方法时,确保你直接传递图片的二进制数据,而不是尝试将其作为字符串处理。
修正后的代码示例应该如下:
import requests
from oss2 import *
# 阿里云OSS配置
auth = Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
bucket = Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
# 请求图片
response = requests.get('http://bj.ganji.com/tel_img/?c=k92KKw9N.WvtNlfkE.6cE0wPqQPPtQyX')
# 确保请求成功
if response.status_code == 200:
# 获取图片二进制数据
img_data = response.content
# 指定OSS中的对象名(即保存的文件名)
oss_key = 'path/to/save/your/image.jpg'
# 上传二进制数据到OSS
bucket.put_object_from_string(oss_key, img_data)
else:
print("Failed to get the image, status code:", response.status_code)
注意:我这里使用了put_object_from_string方法,但实际上对于二进制数据,更推荐使用put_object方法并直接传入二进制数据,或者使用put_object_from_file如果你已经将数据保存到了本地文件。但根据OSS SDK的不同版本,方法名称和参数可能有差异,请参考你所使用的阿里云Python SDK文档进行调整。上述代码中<yourAccessKeyId>, <yourAccessKeySecret>, <yourBucketName>需要替换为你自己的阿里云OSS凭证和桶名。