“使用 POSTMAN 发布图像数据”

Posted

技术标签:

【中文标题】“使用 POSTMAN 发布图像数据”【英文标题】:"Post Image data using POSTMAN" 【发布时间】:2017-02-01 06:33:05 【问题描述】:

我正在尝试将数据发布到我的 API。我有一个带有image 字段的模型,其中:

image = models.ImageField()

我的本​​地盒子上有一张图片,我正在尝试发送。我发送正确吗?


   "id": "3", 
   "uid":"273a0d69",
   "uuid": "90",
   "image": "@/home/user/Downloads/tt.jpeg"

【问题讨论】:

这里是从邮递员youtu.be/sFlPa_Vow3w发送文件的2分钟快速指南 【参考方案1】:

这不是您在邮递员上发送文件的方式。你所做的只是发送一个字符串,它是你的图像的路径,仅此而已。

你应该做的是;

    将请求方法设置为 POST 后,单击“正文”选项卡。 选择表单数据。在第一行,您将看到名为 key 和 value 的文本框。将“图像”写入密钥。您将看到默认设置为“文本”的值类型。将其归档并上传您的文件。 然后选择“raw”并粘贴您的 json 文件。同样在二元选项旁边,您会看到单击了“文本”。将其设为 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()

【讨论】:

你好有没有办法做嵌套图像,即 model: image: file 我收到一个带有 415 HTTP 状态代码的 "detail": "Unsupported media type \"application/json\" in request."。有什么想法吗? 你能把这个添加到标题中再试一次吗?键:内容类型值:应用程序/json 我认为当您在 Postman 中选择 application/json 时,它会自动设置正确的标题,但如果我手动输入它也不起作用。实际上,根据我选择的单选框按钮,我似乎只在服务器端获得图像或 json。两者都不是。 好的,我知道了,如果您想应用上述解决方案,您应该在form-data 中输入 JSON 作为键/值。单选按钮显示您不能同时发送form-dataraw-data【参考方案2】:

现在您可以悬停输入键并选择“文件”,这将在值列中为您提供文件选择器:

【讨论】:

【参考方案3】:

如果您在form-data 面板中将 JSON 设置为键/值对,则接受的答案有效(参见下图)

不过,我想知道这是否是一种非常简洁的 API 设计方式。如果您必须在一次调用中同时上传图像和 JSON 可能没问题,但如果您可以分离路由(一个用于图像上传,另一个用于具有适当内容类型标头的 JSON 正文),它似乎更好.

【讨论】:

它对我不起作用。我尝试了同样的方法....但我需要将文件保存在服务器中,文件名作为参数。任何建议......将不胜感激。 您不必为此提供任何标题。只需确保您在视图中正确访问文件和数据即可。【参考方案4】:

它对我有用:

    转到正文 表单数据 在第一个单元格properties 中选择“文件”

【讨论】:

【参考方案5】:

可以通过三种方式完成

1.转到正文 > 表单数据 > 选择列中的文件

2。转到正文 > 二进制 > 选择文件

3.将图像编码为 base64 字符串并通过邮递员 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

【讨论】:

【参考方案6】:

按照以下步骤操作:

    无需提供任何类型的标题。

    选择 body > form-data 并按照图片所示进行操作。

    现在在您的 Django view.py 中

def post(self, request, *args, **kwargs):
    image = request.FILES["image"]
    data = json.loads(request.data['data'])
    ...
    return Response(...)
    您可以从数据变量中访问所有键(id、uid 等)。

【讨论】:

只是为了澄清-“图像”键是文件输入字段的名称。所以如果你有 那么你在 Postman 中的键就是 myImageFile。 @CodeCaptain,我已经在我的系统上对其进行了测试,答案非常好。 “图像”是键名,邮递员也是如此。 你的答案是正确的。我只是指出,如果有人有一个未命名为“图像”的文件输入,它将不起作用。我的文件输入字段名称是“imageFile”,所以它在 Postman 中对我不起作用。然后我意识到“图像”不是文件的类型,在这种情况下,它是文件输入字段的实际名称。只想为下一个人节省几分钟。 @CodeCaptain 好的 :)【参考方案7】:

如果端点只需要一张图片(而不是键值对),您可以从 二进制 选项卡上传您的图片。

【讨论】:

以上是关于“使用 POSTMAN 发布图像数据”的主要内容,如果未能解决你的问题,请参考以下文章

Postman

如何查询postgresql数量?

Postman使用详解

[Javaee] Ubuntu下载Postman

Postman基本使用(一)

Postman 测试swagger类接口技巧