包含文件的上传下载和生成临时的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文件存储的更多相关文章

  1. 阿里云 OSS文件存储挂到云服务器ESC文件系统中

    ossfs能让您在Linux系统中,将对象存储OSS的存储空间(Bucket)挂载到本地文件系统中,您能够像操作本地文件一样操作OSS的对象(Object),实现数据的共享. 使用限制 ossfs使用 ...

  2. 阿里云OSS对象存储 简单上传文件

    不得不说阿里云的命名比较让人摸不着头脑,开始以为是文件存储NAS,弄了半天什么文件系统,挂载点的搞不明白.后来才搞清楚原来 对象存储OSS才是我需要的. 其中EndPoint就是画红框的部分,但是要加 ...

  3. OSS与文件系统的对比 文件存储 块存储 对象存储

    基本概念介绍_开发指南_对象存储 OSS-阿里云  https://help.aliyun.com/document_detail/31827.html 强一致性 Object 操作在 OSS 上具有 ...

  4. SpringBoot整合阿里云OSS对象存储实现文件上传

    1. 准备工作: 一.首先登录阿里云OSS对象存储控制台创建一个Bucket作为你的存储空间. 二.创建Access Keyan按要求创建进行,这里的方法步骤我就不展现出来了,你们可以自行查询阿里云文 ...

  5. 第2-3-1章 文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

    目录 文件存储服务 1. 需求背景 2. 核心功能 3. 存储策略 3.1 本地存储 3.2 FastDFS存储 3.3 云存储 3.4 minio 4. 技术设计 文件存储服务 全套代码及资料全部完 ...

  6. phpcmsv9 阿里云OSS云存储整合教程

    该教程算不上是phpcmsv9阿里云oss插件,所以整个修改及其代码覆盖前请一定记得备份.还有一点就是后台发布文章时上传的附件还是会保存在你的服务器上,基于以下原因:1.个人的需求是前台页面需要使用t ...

  7. iOS使用阿里云OSS对象存储 (SDK 2.1.1)

    最近项目中用到了阿里云OSS对象存储,用来存储APP中图片.音频等一些数据.但坑爹的阿里云居然在11月20日将SDK版本更新到了2.1.1,然而网上给出的教程都是1.*版本的(针对iOS),两个版本所 ...

  8. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

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

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

随机推荐

  1. sklearn使用——最小二乘法

    参考网页:http://sklearn.apachecn.org/cn/0.19.0/ 其中提供了中文版的文件说明,较为清晰. from sklearn.linear_model import Lin ...

  2. nmap脚本使用总结

    0x00 前言: nmap的基本介绍和基本使用方法,在乌云知识库中已经有人提交过,讲的比较详细,在此文中就不再讲述. 具体链接:http://drops.wooyun.org/tips/2002 本文 ...

  3. 【Linux常见问题】SecureCRT 终端连接密钥交换失败错误

    SecureCRT 终端软件连接linux操作系统,出现如下错误: 英文描述:Key exchange failed. No compatible key exchange method. The s ...

  4. 如何生成git ssh key

    公司有自己的git版本控制,自己注册账号后,管理员同意,就可以查看项目代码了,但是要克隆的话需要在本地生成git ssh key 一.进入.ssh文件夹. cd ~/.ssh 若没有.ssh文件夹,则 ...

  5. google colab 使用指南

    重启colab !kill - - 输出ram信息 !cat /proc/meminfo 输出cpu信息 !cat /proc/cpuinfo 更改工作文件夹 一般,当你运行下面的命令: !ls 你会 ...

  6. Spring Boot web API接口设计之token、timestamp、sign

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/vbirdbest/article/details/80789817一:token 简介Token:访 ...

  7. Linux:Day7(下) 磁盘管理、文件系统管理

    Linux入门 Linux系统管理: 磁盘管理.文件系统管理 RAID基本原理.LVM2 网络管理:TCP/IP协议.Linux网络属性配置 程序包管理:rpm,yum 进程管理:htop,glanc ...

  8. linux运行级别和开机流程

    linux有七个运行级别 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行级别2:多用户状态(没有NF ...

  9. springboot获取applicationcontext

    使用springboot之前,我们通过ClassPathXmlApplicationContext加载spring xml配置文件来获取applicationcontext,使用springboot后 ...

  10. Luogu P1776 宝物筛选_NOI导刊2010提高(02)(多重背包模版)

    传送门 多重背包板子题, 多重背包就是每种东西有好几个,可以把它拆分成一个一个的01背包 优化:二进制拆分(拆成1+2+4+8+16+...) 比如18=1+2+4+8+3,可以证明18以内的任何数都 ...