当你这样做
jpg_data = response.read()
我相信 boto 会丢失有关文件扩展名的信息,它用于猜测 mimetype。所以当你存储它的时候
my_file.write(jpg_data)
boto/S3 所知道的是它有某种二进制数据要写入。
如果您在程序中替换这些行:
storage = S3BotoStorage(bucket='icanhazbukkit')
my_file = storage.open(path_to_new_file, 'w')
my_file.write(jpg_data)
my_file.close()
和
bucket = conn.create_bucket('icanhazbukkit')
k = Key(bucket)
k.name = "yourfilename"
header = {'Content-Type' : 'image/jpeg'}
k.set_contents_from_string(jpg_data, header)
您可以通过使用标头参数指定 Content-Type 来控制它
如果要保留原始获取的 Content-Type,可以执行以下操作:
request = urllib2.Request('http://link.to/file.jpg')
response = urllib2.urlopen(request)
file_data = response.read()
bucket = conn.create_bucket('icanhazbukkit')
k = Key(bucket)
k.name = "yourfilename"
origType = response.info().gettype()
header = {'Content-Type' : origType}
k.set_contents_from_string(file_data, header)