Python使用阿里云OSS服务

前言:

在远程搭建了一个平台,通过改远程平台进行数据的采集,需要将数据内容传送至本地进行处理;为了实现该功能,考虑了阿里云的OSS对象储存的服务。

40G包月只需1元:-)

甚至还有客服致电给你,说有问题可直接通过电话联系对方,15星好评

OSS安装

关于账号注册,开通服务等等功能直接去阿里云的官方进行相应操作即可

  • 安装python-devel

    • win:此过程不需要,在安装Python时已经包含了;
    • Debian/Ubuntu:apt-get install python-dev
  • 安装OSS:pip3 install oss2 -i https://pypi.tuna.tsinghua.edu.cn/simple/

    • 安装完成后可用python进行验证:
    In [1]: import oss2
    
    In [2]: oss2.__version__
    Out[2]: '2.8.0'

OSS使用

创建存储空间:

  • 方式一:直接去网站页面进行创建即可;

  • 方式二:通过代码创建

    import oss2
    auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
    # Endpoint以杭州为例,其它Region请按实际情况填写。yourBucketName就是你要创建的Bucket
    bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')
    bucket.create_bucket(oss2.models.BUCKET_ACL_PRIVATE)

    yourBucketName为你的Bucket名称,若已存在则会报错;

    yourAccessKeySecret,别告诉别哈:)

连接OSS:

auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')

上传文件:

# 此处上传了图片文件
image_path = './test.jpg'
put_result = bucket.put_object_from_file('test.jpg', image_path)
if put_result.status == 200:
# 若此时的status状态为200,则说明上传成功;在你选择的Bucket中已经存在文件名为'test.jpg'的文件了
print('put success')

下载文件:

# param1:oss上bucket中的文件名
# param2:保存在当地的文件路径+文件名
get_result = bucket.get_object_to_file('test01.jpg', './get/test.jpg')
if get_result == 200:
print("get sucess")

整体代码:

  • 根据触发信号获取摄像头的图片;
  • 获取摄像头的实时图片;
  • 将先图片保存到本地->上传阿里云->在本地进行删除
import oss2
import time
import cv2
import os
import RPi.GPIO as GPIO class Camera(object):
"""摄像的初始化,配置"""
def __init__(self, channel):
self.capture = cv2.VideoCapture(channel) self.fps = int(self.capture.get(cv2.CAP_PROP_FPS))
self.video_height = int(self.capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
self.video_width = int(self.capture.get(cv2.CAP_PROP_FRAME_WIDTH)) self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, self.video_width)
self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT, self.video_height)
self.capture.set(cv2.CAP_PROP_FPS, self.fps)
# 设置摄像头的缓存图片为1,为了能获取实时的图像
self.capture.set(cv2.CAP_PROP_BUFFERSIZE, 1) def get_pic(self, image_dir=None, image_name=None, is_show=False, is_write=False):
"""
写入照片
"""
if self.capture.isOpened():
# 读取缓存中的图片,起到清空缓存的作用
abandon_ret, abandon_frame = self.capture.read()
# 用于处理/上传的图片
ret, frame = self.capture.read()
# 判断图片信息是否读取成功
if ret is False:
print('get picture failed')
return None
# 是否需要显示
if is_show is True:
cv2.imshow('image', frame)
cv2.waitKey(200)
# 是否需要写入到文件中
if is_write is True:
cv2.imwrite(image_dir + '/' + image_name, frame)
print('get picture success')
return frame def release_camera(self):
"""
释放摄像机资源
"""
self.capture.release()
cv2.destroyAllWindows() class oss(object):
"""对象存储类,将图片传至阿里云端"""
def __init__(self):
self.auth = oss2.Auth('LTAIkA49HkgVYUsW', '**********************')
self.bucket = oss2.Bucket(self.auth, 'http://oss-cn-hangzhou.aliyuncs.com', '20190731') def put_image(self, image_dir, image_name):
put_result = self.bucket.put_object_from_file(image_name, image_dir + '/' + image_name)
# 状态为200表示成功的上传
if put_result.status == 200:
print('put success') def get_image(self):
pass class gpio(object):
"""触发信号的控制"""
event_flag = False # 判断是否有电平触发信号 def __init__(self, pin):
"""GPIO初始化"""
self.pin = pin
# 设置引脚应用模式
GPIO.setmode(GPIO.BCM)
GPIO.setup(self.pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
# 设计引脚触发模式为:上升沿触发模式,防抖的时间为1000ms
GPIO.add_event_detect(self.pin, GPIO.RISING, callback=gpio.callback, bouncetime=1000) @staticmethod
def callback(flag):
"""回调函数"""
gpio.event_flag = True def stop_event(self):
GPIO.remove_event_detect(self.pin) def start_event(self):
GPIO.add_event_detect(self.pin, GPIO.RISING, callback=gpio.callback, bouncetime=1000) @staticmethod
def release():
"""GPIO释放引脚资源"""
GPIO.cleanup() if __name__ == "__main__":
picture = None
sleep_time = 0
picture_path = './put'
picture_name = '.jpg'
gpio_pin = 18 # oss配置
oss_server = oss()
# 开启摄像头
camera = Camera(0)
# GPIO初始化
event = gpio(gpio_pin) while True:
if gpio.event_flag is True:
gpio.event_flag = False # 标志位置位
event.stop_event() # 关闭事件触发
picture_name = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())) + '.jpg'
# 获取图片
picture = camera.get_pic(picture_path, picture_name, is_show=True, is_write=True) if picture is not None:
pass
# oss_server.put_image(picture_path, picture_name)
else:
camera.release_camera()
camera = Camera(0)
# 删除照片,防止内存爆炸
os.remove(picture_path + '/' + picture_name) event.start_event() # 开启事件触发
# time.sleep(sleep_time) gpio.release()

参考:

https://ptorch.com/news/209.html

Python使用阿里云OSS服务的更多相关文章

  1. angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)

    2015-10-26 angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前 ...

  2. ECS上nginx搭建反向代理通过内网访问阿里云OSS服务

    对于付不起钱的小伙计,为了给公司省钱,想尽一切招数.今天就来分享一个使用阿里云OSS存储搭配CDN使用的网站服务器部署方法. 简介 阿里云OSS 阿里云提供的一种文件存储方案,和我们以前接触的百度云B ...

  3. 物联网架构成长之路(18)-接阿里云OSS服务

    1.申请/购买OSS服务 在阿里云上申请/购买OSS服务, 然后在会得AccessKeyID,AccessKeySecret,bucketName 这三个东西 2.增删改查 在pom.xml文件上增加 ...

  4. 阿里云OSS服务开通STS安全令牌

    搭建直传服务需要完成以下准备工作: 开通OSS,并且创建Bucket. 开通STS服务. 登录 OSS管理控制台. 在OSS概览页中找到基础配置区域,单击 安全令牌,如下图所示: 进入到 安全令牌快捷 ...

  5. 阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)

    分片上传(结合element-ui的upload组件实现自定义上传) async uploadFree(content){ let data = await this.getOssToken(); / ...

  6. 阿里云oss服务通用类

    在webconfig中配置信息 <?xml version="1.0" encoding="utf-8"?><configuration> ...

  7. 构建基于阿里云OSS文件上传服务

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...

  8. thinkphp使用阿里云OSS最新SDK,文件部署

    这文章是建立在你已经注册号阿里云的OSS,和创建好Bucket前提下: 其实阿里云的帮助与文档写的很详细,这里只说一下源码方式 1.phpsdk下载地址(摘自阿里云OSS的帮助与文档)(也有我自己下载 ...

  9. ThinkPHP5使用阿里云OSS图片上传

    1.下载OSS文件放在网站根目录下(OSS文件下载地址:https://gitee.com/jth1234/oss_files.git) 2.在入口文件中加载OSS 3.config文件配置oss信息 ...

随机推荐

  1. WEB漏洞——SQL

    由于我的博客是学到渗透的时候才做的,没有关于WEB漏洞的笔记,现在发现WEB层面的漏洞有些不太熟悉了,边写一下笔记边复习一下,就从sql注入开始吧 话不多说先上大佬写的表[ctfhub]SQL注入 - ...

  2. Python - 面向对象编程 - __del__() 析构方法

    del 语句 Python 提供了 del 语句用于删除不再使用的变量 语法 del 表达式 删除变量的栗子 var = "hello" del var print(var) # ...

  3. 【Python从入门到精通】(二十五)Python多进程的使用

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本篇重点介绍Python多进程的使用,读者朋友们可以将多进程和多线程两者做一个对比学习. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题 ...

  4. Abp Vnext3 vue-admin-template(一用户登录)

    Git地址https://github.com/PanJiaChen/vue-admin-template/blob/master/README-zh.md 官方文档https://panjiache ...

  5. 10.6Java学习

    1.类,对象,方法的定义.2.标识符分为两类:关键字/常见的基本类型:boolean(布尔型),byte(字节型),char(字符型),double(双精度),float(浮点),int(整型),lo ...

  6. PHP中使用if的时候为什么建议将常量放在前面?

    在某些框架或者高手写的代码中,我们会发现有不少人喜欢在进行条件判断的时候将常量写在前面,比如: if(1 == $a){ echo 111; } 这样做有什么好处呢?我们假设一个不小心的粗心大意,少写 ...

  7. seo执行步骤

    第一个金字塔策略这个很适用于大型网站,我想做过大型网站,特别是关键词比较多比较杂乱的站长来说,这个图太熟悉不过了,就算是没有见过,但实际操作中早就用到了这些手法.如果能把这个图领会透并实际应用,做一个 ...

  8. C博客作业00--顺序分支结构

    这个作业属于哪个班级 C语言--网络2011/2012 这个作业的地址 C博客作业00--顺序分支结构 这个作业的目标 初步认识C语法,掌握数据表达.printf.scanf语法及分支结构内容 0.展 ...

  9. JDK1.8源码(三)——java.lang.String类

    一.概述 1.介绍 String是一个final类,不可被继承,代表不可变的字符序列,是一个类类型的变量.Java程序中的所有字符串字面量(如"abc")都作为此类的实例实现,&q ...

  10. php stream 流封装协议

    http://php.net/manual/wrappers.php 过程: 1. 开始通信 2. 读取数据 3. 写入数据 4. 结束通信 usage: * 读写文件系统 <?php $han ...