Python中文
首页
教程
问答
标签
搜索
登录
注册
Python如何将base64数据从MongoDB发送到Multipartform API
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有一个MongoDB,其中一些小的图像样本存储为Base64。 我的目标是用python创建一个脚本,witch能够读取这些脚本并向API发送多部分/表单请求。 以下是API在postman上的外观: <a href="https://i.stack.imgur.com/zsMjr.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/zsMjr.png" alt="enter image description here"/></a></p> <p>实际上,这是我用python编写的代码:</p> <pre><code>from pymongo import MongoClient import numpy as np import cv2 import base64 import requests def readb64(base64_string): sbuf = StringIO() sbuf.write(base64.b64decode(base64_string)) pimg = Image.open(sbuf) return cv2.cvtColor(np.array(pimg), cv2.COLOR_RGB2BGR) client = MongoClient("mongodb://root:example@localhost:27017/") mydb = client["image"] mycol = mydb["samples"] mydoc = mycol.find( { "api_shape_processed": False}, { "_id": 1,"samples.eroded_sample_inverted_b64": 1} ) url = 'http://localhost:8000/prediction/' for x in mydoc: payload = {base64.b64decode(x)} files = {"foo": "bar"} response = requests.put(url, data=payload, file=files) </code></pre> <p>运行时,我收到以下错误消息:</p> <pre><code> raise TypeError("argument should be a bytes-like object or ASCII " TypeError: argument should be a bytes-like object or ASCII string, not 'dict' </code></pre> <p>我不知道如何创建正确的请求来正确调用API。 如有任何意见,请提前通知Thx</p> <p><strong>更新</strong></p> <p>使用上面检索到的记录的查询:</p> <pre><code>{'_id': ObjectId('5fe0d16baa01291a71c5bf55'), 'samples': [{'eroded_sample_inverted_b64': '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr........'}, {'eroded_sample_inverted_b64': '/9j/4AAQSkZJR.......}]} </code></pre> <p>如果我使用此sintax生成有效负载:</p> <pre><code> for x in mydoc: payload = {base64.b64decode(x['samples']['eroded_sample_inverted_b64'])} print(payload) </code></pre> <p>我得到这个错误:</p> <pre><code>payload = {base64.b64decode(x['samples']['eroded_sample_inverted_b64'])} TypeError: list indices must be integers or slices, not str </code></pre> <p><strong>更新2</strong> 使用此代码:</p> <pre><code>url = 'http://localhost:8000/prediction/' for x in mydoc: for sample in x.get('samples', []): payload = {base64.b64decode(sample['eroded_sample_inverted_b64'])} nparr = np.fromstring(base64.b64decode(sample['eroded_sample_inverted_b64']), np.uint8) img = cv2.imdecode(nparr, cv2.IMREAD_COLOR) files={"foo": "bar"} response = requests.post(url, data={'File': cv2.imdecode(nparr, cv2.IMREAD_COLOR)}, files=files) print(response) </code></pre> <p>我从API端获得此错误:</p> <pre><code>"POST /prediction/ HTTP/1.1" 422 Unprocessable Entity </code></pre> <p>我真的不明白如何正确地塑造POST请求</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>当您使用<code>find()</code>迭代游标时,每个文档将表示为<code>dict</code>项;因此,您将传递整个文档进行解码,而不是传递带有编码数据的特定字段</p> <p>这可能更接近您的需要:</p> <pre><code>for x in mydoc: payload = {base64.b64decode(x[samples][eroded_sample_inverted_b64])} </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
创建一个python程序,从websi中提取文件
8 回答
创建一个python程序,告诉我名字和出生年份的人的年龄
8 回答
创建一个Python程序,它接受一个简短的描述并从给定的集合返回一个解决方案(使用nlp)
6 回答
创建一个python程序,用户在其中输入一个月,它会告诉您y的下一个月
2 回答
创建一个python程序,要求用户输入一个偶数奇数
2 回答
创建一个Python程序来修改名称以digi结尾的目录的文本文件
7 回答
创建一个python程序来猜测用户的“秘密号码”?
8 回答
创建一个python算法来训练keras模型来预测一个大的整数序列
8 回答
创建一个python类,它被视为一个列表,但是有更多的特性?
5 回答
创建一个Python类,我可以将其序列化为一个嵌套的JSON obj
3 回答
创建一个python类来查找直线的斜率和长度
10 回答
创建一个Python网络爬虫来获取谷歌Play商店应用程序的元数据
9 回答
创建一个Python网页
2 回答
创建一个python脚本,不断从excel文件中读取数据并进行计算
9 回答
创建一个python脚本,使用tcpdump计算到达网站的数据包数量?
1 回答
创建一个Python脚本,可以运行其他SAS程序并更新Excel工作簿。
8 回答
创建一个python脚本,它将读取csv文件,并使用该输入从web抓取数据finviz.com网站然后将数据导出到csv fi中
4 回答
创建一个python脚本,用mysql数据库中的结构和数据文件创建一个sql转储
7 回答
创建一个python脚本,该脚本将对某个键进行文本文件搜索,并将编号复制到新文件中
5 回答
创建一个Python脚本,该脚本连接到特定端口(SMTP)上的一系列IP
8 回答