Python 上传图片到OneNet
最近参加了中国移动创客马拉松,需要用到OneNet平台。由于要向平台上传图片,所以写了这段代码。
1、使用postman发送post请求
使用post方法,在URL栏中填写指定的URL;
在Headers中添加api-key;
在Body中选择binary(二进制数据),并指定文件1.jpg
然后点击Send,发送这段数据,得到的返回结果是一串字符串:
{
"errno": 0,
"data": {
"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头部
api-key:xxxx-ffff-zzzzz,数据流 Key
URL参数
device_id,必选,该数据所属设备。
datastream_id,必选,该数据所属数据流
HTTP内容
普通二进制数据、文件、图像
请求返回
{
”errno”: 0,
”error”:“succ”,
”data”:{
//该数据在设备云的索引
”index”:“AJOWFW1133OFO2Z93”
}
}
接着以二进制的形式读取图片数据,并使用request库以二进制流的形式上传数据。requests支持流式上传,允许发送大数据流文件,无需预先把数据读入到文件。具体可见request的文档:
solution.py
import requests
url = "http://api.heclouds.com/bindata"
headers = {
"Content-Type": "image/jpg",
"api-key": "*************",
}
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
发布了404 篇原创文章 · 获赞 372 · 访问量 84万+