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 ...
随机推荐
- MySQL 系列(四) 主从复制、读写分离、模拟宕机、备份恢复方案生产环境实战
本章内容: 主从复制 简介原理 备份主库及恢复从库,配置从库生效 读写分离 如果主宕机了,怎么办? 双主的情况 MySQL 备份及恢复方案 备份单个及多个数据库 mysqldump 的常用参数 如何增 ...
- ASP.NET -- WebForm -- HttpRequest类的方法和属性
ASP.NET -- WebForm -- HttpRequest类的方法和属性 1. HttpRequest类的方法(1) BinaryRead: 执行对当前输入流进行指定字节数的二进制读取. ( ...
- Windows 下自动同步文件夹内容到另一个文件夹下
实现windows 使用bat脚本文件,复制文件夹到另一个盘,参考如下代码:/y是可以不显示:提示你需要覆盖一个文件,如下图: bat文件内容为 @echo off echo "使用bat脚 ...
- 怎样用命令行开启或关闭Windows服务
怎样用命令行开启或关闭Windows服务 本篇博客主要包含一个内容: 怎样用命令行开启或关闭Windows服务 闲话少叙,直奔主题. 1.在桌面右击新建一个文本文档,然后打开. 2.找到需要开启或关闭 ...
- 在Linux上编译Hadoop-2.4.0实践与总结
问题导读: 1.编译源码前需要安装哪些软件? 2.安装之后该如何设置环境变量? 3.为什么不要使用JDK1.8? 4.mvn package -Pdist -DskipTests -Dtar的作用是什 ...
- 面试总结——Java篇
前言:前期对Java基础的相关知识点进行了总结,具体参看:Java基础和面试知识点.近期由于笔者正在换工作(ing),因此下面将笔者在面试过程中或笔者朋友面试过程中反馈的题目进行总结,相信弄清楚下面题 ...
- SQLite也可能出现死锁
提到锁就不得不说到死锁的问题,而SQLite也可能出现死锁.下面举个例子:连接1:BEGIN (UNLOCKED)连接1:SELECT ... (SHARED)连接1:INSERT ... (RESE ...
- PHP json_encode 中文乱码
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 在编码过程中.经常会用到json_encode来处理中文.但是.出现一个问题.中文 ...
- 01 python初学(注释、交互、if while for)
为了能生存下去,一定要坚持学习! 目录 1. 注释 2. 用户交互 3. if .while.for 语句 1. 注释 单行注释: # 多行注释: 三个单引号 || 三个双引号 2. 用户交互: ...
- JavaScript的基本包装类型说明
一.基本包装类型: 为了便于操作基本类型值,ECMAScript 还提供了3个特殊的引用类型:Boolean.Number和String.这些基本包装类型,具有与各自基本类型相应的特殊行为. 实际上我 ...