我正在尝试将数据POST到我的API。我有一个带有image字段的模型,其中:
image
image = models.ImageField()
我的本地盒子上有一张图片,我正试图发送它。我发送的正确吗?
{ "id": "3", "uid":"273a0d69", "uuid": "90", "image": "@/home/user/Downloads/tt.jpeg" }
ykejflvf1#
这不是你在 Postman 上发送文件的方式。你所做的只是发送一个字符串,它是你的图像的路径,仅此而已。你应该做的是:1.将请求方法设置为POST后,单击“body”选项卡。1.选择form-data。在第一行,您将看到名为key和value的文本框。将“image”写入key。您将看到默认设置为“text”的值类型。将其设置为File并上载您的文件。1.然后选择“raw”并粘贴JSON文件。另外,在二进制选项旁边,你会看到“Text”被点击。将其设置为JSON。
你可以走了。在你的Django看来
from rest_framework.views import APIView from rest_framework.parsers import MultiPartParser from rest_framework.decorators import parser_classes @parser_classes((MultiPartParser, )) class UploadFileAndJson(APIView): def post(self, request, format=None): thumbnail = request.FILES["file"] info = json.loads(request.data['info']) ... return HttpResponse()
xwmevbvl2#
现在您可以悬停键输入并选择“file”,这将在值列中给予您一个文件选择器:
gwo2fgha3#
如果您在form-data面板中将JSON设置为键/值对,则接受的答案有效(请参见下图)
form-data
尽管如此,我想知道这是否是一个非常干净的设计API的方法。如果你必须在一个调用中同时上传图片和JSON,也许这是可以的,但如果你可以分开路径(一个用于图片上传,另一个用于带有适当内容类型头的JSON主体),这似乎更好。
6gpjuf904#
可以通过三种方式来实现
1.转到“正文”〉“表单数据”〉“选择列中的文件”
2.转到“主体”〉“二进制”〉“选择文件”
3.将图像编码为base64字符串,并通过postman Body〉raw〉JSON传递,如所附截图中所述
然后在服务器端,您可以用这种方式解码
import base64 decode = base64.b64decode(data) from django.core.files.base import ContentFile file = ContentFile(decode, name=name)
注意:您可以通过该链接将文件编码为base64,然后在curl中发送它。https://base64.guru/converter/encode/file
dced5bon5#
它对我很有效:1.后藤正文1.表单数据1.在第一个单元格中选择“File”properties
u5i3ibmn6#
请遵循以下步骤:1.不需要给予任何类型的标头。1.选择body〉form-data,然后执行与图中所示相同的操作。x1c 0d1x1.现在在你的Django中view.py
def post(self, request, *args,**kwargs): image = request.FILES["image"] data = json.loads(request.data['data']) ... return Response(...)
1.您可以从数据变量访问所有密钥(id、uid等)。
pkln4tw67#
如果端点只需要一个映像(而不是键值对),您可以从***binary***选项卡上传映像。
7条答案
按热度按时间ykejflvf1#
这不是你在 Postman 上发送文件的方式。你所做的只是发送一个字符串,它是你的图像的路径,仅此而已。
你应该做的是:
1.将请求方法设置为POST后,单击“body”选项卡。
1.选择form-data。在第一行,您将看到名为key和value的文本框。将“image”写入key。您将看到默认设置为“text”的值类型。将其设置为File并上载您的文件。
1.然后选择“raw”并粘贴JSON文件。另外,在二进制选项旁边,你会看到“Text”被点击。将其设置为JSON。
你可以走了。
在你的Django看来
xwmevbvl2#
现在您可以悬停键输入并选择“file”,这将在值列中给予您一个文件选择器:
gwo2fgha3#
如果您在
form-data
面板中将JSON设置为键/值对,则接受的答案有效(请参见下图)尽管如此,我想知道这是否是一个非常干净的设计API的方法。如果你必须在一个调用中同时上传图片和JSON,也许这是可以的,但如果你可以分开路径(一个用于图片上传,另一个用于带有适当内容类型头的JSON主体),这似乎更好。
6gpjuf904#
可以通过三种方式来实现
1.转到“正文”〉“表单数据”〉“选择列中的文件”
2.转到“主体”〉“二进制”〉“选择文件”
3.将图像编码为base64字符串,并通过postman Body〉raw〉JSON传递,如所附截图中所述
然后在服务器端,您可以用这种方式解码
注意:您可以通过该链接将文件编码为base64,然后在curl中发送它。
https://base64.guru/converter/encode/file
dced5bon5#
它对我很有效:
1.后藤正文
1.表单数据
1.在第一个单元格中选择“File”
properties
u5i3ibmn6#
请遵循以下步骤:
1.不需要给予任何类型的标头。
1.选择body〉form-data,然后执行与图中所示相同的操作。x1c 0d1x
1.现在在你的Django中view.py
1.您可以从数据变量访问所有密钥(id、uid等)。
pkln4tw67#
如果端点只需要一个映像(而不是键值对),您可以从***binary***选项卡上传映像。