Python 上传图片到OneNet

最近参加了中国移动创客马拉松,需要用到OneNet平台。由于要向平台上传图片,所以写了这段代码。

1、使用postman发送post请求

使用post方法,在URL栏中填写指定的URL;
在Headers中添加api-key;
在Body中选择binary(二进制数据),并指定文件1.jpg

然后点击Send,发送这段数据,得到的返回结果是一串字符串:

  1. {
  2. "errno": 0,
  3. "data": {
  4. "index": "**************"
  5. },
  6. "error": "succ"
  7. }

Python 上传图片到OneNet_Python_两鬓已不能斑白的专栏-CSDN博客 - 图1

Python 上传图片到OneNet_Python_两鬓已不能斑白的专栏-CSDN博客 - 图2

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的文档:

Python 上传图片到OneNet_Python_两鬓已不能斑白的专栏-CSDN博客 - 图3

solution.py

  1. import requests
  2. url = "http://api.heclouds.com/bindata"
  3. headers = {
  4. "Content-Type": "image/jpg",
  5. "api-key": "*************",
  6. }
  7. querystring = {"device_id": "****", "datastream_id": "******"}
  8. with open('timg.jpg', 'rb') as f:
  9. requests.post(url, params=querystring, headers=headers, data=f)
  10. print('success')

接下来就能在平台上看到我们上传的图片了。

Python 上传图片到OneNet_Python_两鬓已不能斑白的专栏-CSDN博客 - 图4

参考:http://docs.python-requests.org/zh_CN/latest/user/advanced.html#advanced

Python 上传图片到OneNet_Python_两鬓已不能斑白的专栏-CSDN博客 - 图5

Python 上传图片到OneNet_Python_两鬓已不能斑白的专栏-CSDN博客 - 图6 Python 上传图片到OneNet_Python_两鬓已不能斑白的专栏-CSDN博客 - 图7

发布了404 篇原创文章 · 获赞 372 · 访问量 84万+