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 ...
随机推荐
- Python: datetime 转换
Directive Meaning Example Notes %a Weekday as locale’s abbreviated name. Sun, Mon, …, Sat (en_US); S ...
- Linux:固定 ip
默认情况下,安装完操作系统时,ip是采用dhcp来动态分配的.通常我们需要将其固定下来. 不然 每次系统重启后,ip都会变动,这样会给日常工作带来不必要的麻烦的. 下面就是在rhel .centos ...
- windowsserver2016系统性能和功能对比介绍
一. 性能和可扩性 特征描述 Windows Server 2012/2012 R2 标准版和数据中心 Windows Server 2016 标准版和数据中心 物理内存(主机)支持 每个物理服 ...
- LeetCode算法题-Ransom Note(Java实现)
这是悦乐书的第212次更新,第225篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第80题(顺位题号是383).给定一个任意赎金票据字符串和另一个包含所有杂志字母的字符串 ...
- 日志收集(ElasticSearch)串联查询 MDC
之前写过将应用程序或服务程序产生的日志直接写入搜索引擎的博客 其中基本过程就是 app->redis->logstash->elasticsearch 整个链路过程 本来想将re ...
- 使用Razor Generator构建模块化ASP.NET MVC应用程序
在构建Web应用程序的时候,我们很难做到模块化的开发,这是因为Web应用程序不仅仅包含编译的C#代码,还包含了js.css和aspx等资源. 在ASP.NET MVC中,我们发布应用程序的时候,还会包 ...
- 17.基于scrapy-redis两种形式的分布式爬虫
redis分布式部署 1.scrapy框架是否可以自己实现分布式? - 不可以.原因有二. 其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls ...
- 008_python列表的传值与传址
一. 今天发现一个奇怪的现象,代码如下: aList = ['xyz', 'zara', 'abc', 'xyz','xysdfji','xywooudd'] for x in aList: if x ...
- app前端代码打包步骤
一.搭建项目环境 1.安装node.js 在网上找到nodejs压缩包,下载解压后安装node-v8.9.3-x64.msi文件. 安装完毕后,在windows的cmd控制台输入node -v或nod ...
- oracle RAC 查询告警日志位置
[grid@db2 db2]$ adrci ADRCI: Release 12.2.0.1.0 - Production on Mon Feb 25 15:51:14 2019 Copyright ( ...