【发布时间】:2021-08-02 11:22:26
【问题描述】:
我有一个带有用于 ImageField 的 API 的模型。我需要发送通过模板上的 post 方法获取的图像,并通过 post 请求将其发送到创建的 API。获取的图像类型为InMemoryUploadedFile,如果我尝试直接发送它,由于序列化程序验证失败,我会得到 406。所以我尝试用它制作一个 PIL 对象并尝试发送。我检查了代码的 JS 对应部分,它只是从输入字段中获取文件并将其直接发送到同一字段并且它可以工作。
有没有一种方法可以让我通过 post 请求发送一个图像文件对象以使序列化程序验证失败。
category_thumbnail = request.FILES.get('category_thumbnail')
category_thumbnail = Image.open(category_thumbnail)
data = {
'category_thumbnail': category_thumbnail
}
这会给我 406。
我还尝试将图像字符串转换为 base64 字节对象。
category_thumbnail = request.FILES.get('category_thumbnail')
category_thumbnail = Image.open(category_thumbnail)
with io.BytesIO() as output:
category_thumbnail.save(output, format="GIF")
contents = output.getvalue()
category_thumbnail = base64.b64decode(contents)
data = {
'category_thumbnail': category_thumbnail
}
但这也会给我 406。
我想知道是否有一种方法可以发送从InMemoryUploadedFile 获取的图像文件对象。
也试过了
category_thumbnail = request.FILES.get('category_thumbnail').file
【问题讨论】:
-
服务器对“category_tumbnail”字段的期望是什么?
-
@AkashRudra 它是一个 ImageField 并且在 API 中它只是通过序列化程序进行验证。所以一个图像类型的对象。
-
@JPG 这是他在 API 方面面临的问题。我的问题是在视图方面。我需要将图像作为参数发送而不接收。
标签: python json django django-rest-framework