本文主要是介绍Python 上传图片到OneNet,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Python 上传图片到OneNet
最近参加了中国移动创客马拉松,需要用到OneNet平台。由于要向平台上传图片,所以写了这段代码。
1、使用postman发送post请求
使用post方法,在URL栏中填写指定的URL;
在Headers中添加api-key;
在Body中选择binary(二进制数据),并指定文件1.jpg
然后点击Send,发送这段数据,得到的返回结果是一串字符串:
{"errno": 0, # 0表示成功"data": { # 服务器返回的数据"index": "**************" #post数据成功后,服务器返回数据的索引index },"error": "succ" # 成功
}
2、用python代码实现上述过程
下面这段代码首先定义了http的header,在header中定义了Content-Type和api-key。其中,Content-type不指定也是可以的;api-key则必须要指定,因为是OneNet平台要求的鉴权。在使用OneNET Restful API时,HTTP请求消息的头域必须携带该APIKey字段,OneNET会依据APIKey字段判别该用户是否具有对应操作的权限。
然后在参数中,指定了device_id和datastream_id。Restful API请见下表:
HTTP方法 | POST |
---|---|
URL | http:///bindata |
HTTP头部 | api-key:xxxx-ffff-zzzzz,数据流 Key |
URL参数 | device_id,必选,该数据所属设备。 datastream_id,必选,该数据所属数据流 |
HTTP内容 | 普通二进制数据、文件、图像 |
请求返回 | { ”errno”: 0, ”error”:“succ”, ”data”:{ //该数据在设备云的索引 ”index”:“AJOWFW1133OFO2Z93” } } |
接着以二进制的形式读取图片数据,并使用request库以二进制流的形式上传数据。requests支持流式上传,允许发送大数据流文件,无需预先把数据读入到文件。具体可见request的文档:
solution.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-import requestsurl = "http://api.heclouds.com/bindata"headers = {"Content-Type": "image/jpg", # "api-key": "*************", # 你的api-key
}# device_id是你的设备id
# datastream_id是你的数据流id
querystring = {"device_id": "****", "datastream_id": "******"}# 流式上传
with open('timg.jpg', 'rb') as f:requests.post(url, params=querystring, headers=headers, data=f)print('success')
接下来就能在平台上看到我们上传的图片了。
参考:http://docs.python-requests.org/zh_CN/latest/user/advanced.html#advanced
这篇关于Python 上传图片到OneNet的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!