![](/img/trans.png)
[英]keras image_load() in Django expected str, bytes or os.PathLike object, not ImageFieldFile
[英]TypeError: expected str, bytes or os.PathLike object, not ImageFieldFile
我正在尝试将文件上传到另一台服务器。 我正在尝试这样做:
package = Package.objects.get(id=package_id)
with open(package.logo_image.image, 'rb') as image_handle:
image_data = bytes(image_handle.read())
image = {
'type': 'IMAGE',
'data': image_data,
'xsi_type': 'Image'
}
logo_image = media_service.upload(image)[0]
模型中的字段:
image = models.ImageField(upload_to=generate_file_path, null=True, blank=True)
尝试运行此代码后,我得到:
with open(package.logo_image.image, 'rb') as image_handle: TypeError: expected str, bytes or os.PathLike object, not ImageFieldFile
转换为str()没有帮助。
是否可以以二进制模式打开此文件? 谢谢!
您根本不需要打开文件。 ImageField(和 FileField)使您可以直接访问底层文件对象。
package = Package.objects.get(id=package_id)
image_data = bytes(package.logo_image.image.read())
可以打开ImageField
类型的关系以将文件作为二进制数据读取。 对于您的示例,这将使用以下语法:
package.logo_image.image.open(mode='rb')
一个有用的情况是,如果您想使用ImageField
的图像来使用请求模块发布数据,例如:
file_list = [
('image[data]', (
'image.jpg',
package.logo_image.image.open(mode='rb'),
'image/jpg')
),
]
resp = requests.post(
"http://example.com/image-ingester"
files=file_list
)
这在 Django 的FileField
API 文档( 链接)下进行了描述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.