python - seek() 接受 2 个位置参数,但给出了 3 个
问题描述
我正在将图像上传到内存,然后我想将其保存到 imageField()。
我使用 django-storages 将文件从 image/fileField() 上传到 AWS S3。
我将图像下载到内存中:
r = requests.get(url, headers=header)
image = Image.open(BytesIO(r.content))
image_in_memory = InMemoryUploadedFile(image, None, "foo.png", 'image/png', image.size, None)
image_in_memory_file = image_in_memory.file
一些验证:
print(type(image_in_memory))
---
<class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
当我保存这个时:
my_object.cover.save(name="foo.png", content=image_in_memory)
Django 生成此错误:
web_1 | link.cover.save(name="foo.png", content=image_in_memory)
web_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/fields/files.py", line 87, in save
web_1 | self.name = self.storage.save(name, content, max_length=self.field.max_length)
web_1 | File "/usr/local/lib/python3.7/site-packages/django/core/files/storage.py", line 52, in save
web_1 | return self._save(name, content)
web_1 | File "/usr/local/lib/python3.7/site-packages/storages/backends/s3boto3.py", line 491, in _save
web_1 | self._save_content(obj, content, parameters=parameters)
web_1 | File "/usr/local/lib/python3.7/site-packages/storages/backends/s3boto3.py", line 505, in _save_content
web_1 | content.seek(0, os.SEEK_SET)
web_1 | TypeError: seek() takes 2 positional arguments but 3 were given
你看到问题了吗?
解决方案
出于某种原因,您将文件包装在 Pillow Image 类中。Imageseek
方法适用于图像序列,正如错误所解释的,它采用两个位置参数。
不要将其包装为图像:
r = requests.get(url, headers=header)
image = BytesIO(r.content)
image_in_memory = InMemoryUploadedFile(image, None, "foo.png", 'image/png', len(r.content), None)
另请注意,有一个更简单的类 SimpleUploadedFile,它只接受名称和内容,这可能是您需要的:
r = requests.get(url, headers=header)
image_in_memory = SimpleUploadedFile("foo.png", r.content, 'image/png')
推荐阅读
- python-3.x - 从 fashion_MNIST 数据打印图像会给出彩色图像?
- r - 在 R 中格式化数字并转换为具有特定字体和大小的文本
- django - Django rest-auth 自定义登录表单 - 无法识别输入的电子邮件:“必须包括 \"email\" 和 \"password\"。”
- android - Android 8.1 上的 ADB wifi 永久
- docker - 如何使用 docker-compose 在 Openshift Container Platform 中部署?
- design-patterns - 复合设计模式 - 如何创建计算器
- django - 在 Django 中实现 PostgreSQL HStore
- php - 如何更改php中的打印变量?
- linux - 循环遍历 CSV 文件中的每一列并将不同的值导出到文件中
- javascript - 如何在 webdriverIO 的屏幕截图名称中获取测试套件/测试用例名称?