Oss文件存储
包含文件的上传下载和生成临时的url
# -*- coding: utf-8 -*- import os
import oss2
import configparser
from Config import * class AliOss:
def __init__(self):
# 读取配置文件
self._cf = configparser.ConfigParser()
self._cf.read(ConfigPath) # 读取环境变量或定义常量
self._access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', self._cf.get("oss","OSS_TEST_ACCESS_KEY_ID"))
self._access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', self._cf.get("oss","OSS_TEST_ACCESS_KEY_SECRET"))
self._bucket_name = os.getenv('OSS_TEST_BUCKET', self._cf.get("oss","OSS_TEST_BUCKET"))
self._endpoint = os.getenv('OSS_TEST_ENDPOINT', self._cf.get("oss","OSS_TEST_ENDPOINT"))
# self._filepath = self._cf.get("oss","FILEPATH") # OSS认证信息
auth = oss2.Auth(self._access_key_id, self._access_key_secret) # 创建Bucket对象,所有Object相关的接口都可以通过Bucket对象来进行
self._bucket = oss2.Bucket(auth, self._endpoint, self._bucket_name) # 上传文件至oss
#
# [Params]
# from_file: 上传对象文件
# to_oss: 上传至oss的文件名
# remove_from_file: 是否删除原文件
#
async def upload(self, from_file, to_oss=None, remove_from_file=False):
# 上传oss的文件名未指定,则默认为当前文件名
oss_file_name = os.path.basename(from_file) if to_oss is None else to_oss
self._bucket.put_object_from_file(oss_file_name, from_file) # 删除原文件
if remove_from_file:
os.remove(from_file) return True # 下载文件
#
# [Params]
# from_oss: 上传对象文件
# out_path: 上传至oss的文件名
#
def download(self, from_oss, out_path):
# 文件不存在返回False
if not self.exists(from_oss):
return False # 未指定输出路径,默认为当前路径下保存
out = from_oss if out_path is None else out_path
self._bucket.get_object_to_file(from_oss, out) return True # Stream
#
# [Params]
# oss_key: 上传对象Key
# oss_value: 上传内容
#
def put(self, oss_key, oss_value):
self._bucket.put_object(oss_key, oss_value)
return True # Stream
#
# [Params]
# oss_key: 上传对象Key
#
def stream(self, oss_key):
# oss对象不存在则返回None
if not self.exists(oss_key):
return None # 返回流式对象
return self._bucket.get_object(oss_key) # 文件是否存在
#
# [Params]
# oss_file_name: oss的文件名
#
def exists(self, oss_file_name):
return self._bucket.object_exists(oss_file_name) # 删除文件
#
# [Params]
# oss_file_name: oss的文件名
#
async def delete(self, oss_file_name):
self._bucket.delete_object(oss_file_name) return True def signedUrl(self, oss_file_name, HTTP_METHOD='GET', expiredTime=60):
result = self._bucket.sign_url(HTTP_METHOD, oss_file_name, expiredTime)
result.replace("-internal","")
return result
对上面的函数进行解释和说明
上传文件
self._bucket.put_object_from_file(oss_file_name, from_file) 接受的是本地的文件名称
可以这样使用
bucket.put_object_from_file('./example.jpg','./example.jpg')
下载文件
out = from_oss if out_path is None else out_path
self._bucket.get_object_to_file(from_oss, out)
第一个参数是fromOss,第二个参数是本地的输出路径
bucket.get_object_to_file('example.jpg', 'example2.jpg')
上传文件(以流的形式)
self._bucket.put_object(oss_key, oss_value)
需要打开的操作
with open(oss2.to_unicode('本地座右铭.txt'), 'rb') as f:
bucket.put_object('云上座右铭.txt', f)
下载文件(以流的形式)
def stream(self, oss_key):
# oss对象不存在则返回None
if not self.exists(oss_key):
return None # 返回流式对象
return self._bucket.get_object(oss_key)
直接去指定oss文件上的文件名称
result=bucket.get_object('5a055c56705deb3b31d3bcab.json')
print(result.read())
判断oss上是否存在这个文件
直接把需要判断的文件名当参数进行判断即可
def exists(self, oss_file_name):
return self._bucket.object_exists(oss_file_name)
删除oss上的文件
async def delete(self, oss_file_name):
self._bucket.delete_object(oss_file_name)
生成一个临时的签名url供客户端下载
bucket.sign_url('请求的方法get或post', 'oss上的文件名', '过期的时间')
def signedUrl(self, oss_file_name, HTTP_METHOD='GET', expiredTime=60):
result = self._bucket.sign_url(HTTP_METHOD, oss_file_name, expiredTime)
result.replace("-internal","")
return result
Oss文件存储的更多相关文章
- 阿里云 OSS文件存储挂到云服务器ESC文件系统中
ossfs能让您在Linux系统中,将对象存储OSS的存储空间(Bucket)挂载到本地文件系统中,您能够像操作本地文件一样操作OSS的对象(Object),实现数据的共享. 使用限制 ossfs使用 ...
- 阿里云OSS对象存储 简单上传文件
不得不说阿里云的命名比较让人摸不着头脑,开始以为是文件存储NAS,弄了半天什么文件系统,挂载点的搞不明白.后来才搞清楚原来 对象存储OSS才是我需要的. 其中EndPoint就是画红框的部分,但是要加 ...
- OSS与文件系统的对比 文件存储 块存储 对象存储
基本概念介绍_开发指南_对象存储 OSS-阿里云 https://help.aliyun.com/document_detail/31827.html 强一致性 Object 操作在 OSS 上具有 ...
- SpringBoot整合阿里云OSS对象存储实现文件上传
1. 准备工作: 一.首先登录阿里云OSS对象存储控制台创建一个Bucket作为你的存储空间. 二.创建Access Keyan按要求创建进行,这里的方法步骤我就不展现出来了,你们可以自行查询阿里云文 ...
- 第2-3-1章 文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss
目录 文件存储服务 1. 需求背景 2. 核心功能 3. 存储策略 3.1 本地存储 3.2 FastDFS存储 3.3 云存储 3.4 minio 4. 技术设计 文件存储服务 全套代码及资料全部完 ...
- phpcmsv9 阿里云OSS云存储整合教程
该教程算不上是phpcmsv9阿里云oss插件,所以整个修改及其代码覆盖前请一定记得备份.还有一点就是后台发布文章时上传的附件还是会保存在你的服务器上,基于以下原因:1.个人的需求是前台页面需要使用t ...
- iOS使用阿里云OSS对象存储 (SDK 2.1.1)
最近项目中用到了阿里云OSS对象存储,用来存储APP中图片.音频等一些数据.但坑爹的阿里云居然在11月20日将SDK版本更新到了2.1.1,然而网上给出的教程都是1.*版本的(针对iOS),两个版本所 ...
- SpringBoot整合阿里云OSS文件上传、下载、查看、删除
1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...
- 构建基于阿里云OSS文件上传服务
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...
随机推荐
- 安全之路 —— 使用Windows全局钩子打造键盘记录器
简介 键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个 ...
- AppiumLibrary常用关键字
通过上一章节,open application关键字的使用,相信大家对手机自动化充满了兴趣,那么今天这一章节,主要介绍AppiumLibrary中常用关键字的使用. 一.实用函数 关键字 含义 实例 ...
- LeetCode算法题-Reverse String(Java实现)
这是悦乐书的第205次更新,第217篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第73题(顺位题号是344).编写一个以字符串作为输入并返回字符串的函数.例如: 输入: ...
- 常用Dockerfile举例
FROM ubuntu:14.04 MAINTAINER sss ENV JAVA_HOME /opt/jdk RUN \ echo 'export PATH=$JAVA_HOME/bin:$PATH ...
- CF 331 E. Biologist
CF 331 E. Biologist 题目描述 题目大意:有\(n\)个点,初始时每个点为黑色或者白色,你可以花费\(v_i\)的代价将一个点反色.然后你有许多计划,每个计划要求一个点集中的所有点为 ...
- 什么是数据库ACID?
原子性:由于操作失败导致的数据碎片错误: 一致性:由于并发导致的数据库数据错误(与预期不一致): 隔离性:由于并发导致的当前使用数据(应用端)错误: 事务在当今的企业系统无处不在,即使在高并发环境下也 ...
- BeautifulSoup类
from bs4 import BeautifulSoup soup1 = BeautifulSoup("<html>data</html>"," ...
- BZOJ1095:[ZJOI2007]Hide 捉迷藏(动态点分治)
Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩 捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条 ...
- Linux:Day8(上) 文件系统挂载和管理工具
文件系统管理: 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为称之为挂载: 解除此关联关系的过程称之为卸载: 把设备关联挂载点:Mount Point ...
- mybatis之一对多
今天主要话题围绕这么几个方面? mybatis一对多示例 sql优化策略 一.mybatis之一对多 在说一对多之前,顺便说一下一对一. 一对一,常见的例子,比如以常见的班级例子来说,一个班主任只属于 ...