文档章节

Oss文件存储

o
 osc_x4h57ch8
发布于 2018/04/24 09:52
字数 709
阅读 10
收藏 0
def

精选30+云产品,助力企业轻松上云!>>>

 

包含文件的上传下载和生成临时的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



o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
利用阿里云OSS Browser图形工具管理OSS对象存储文件

之前老左有分享过利用阿里云OSS对象存储自建图床,以及可以将WordPress网站中的图片、附件单独存储与网站文件分离,其中可以用到WPOSS插件工具(WPOSS插件实现WordPress图片分离至阿里云OSS...

osc_5xuqrjao
2019/05/07
9
0
使用阿里云 OSS 存储、访问图片(Java)

一、阿里云 OSS 1、什么是阿里云 OSS?   OSS 为 Object Storage Service,即对象存储服务。是阿里云提供的海量、安全、低成本、高可靠的云存储服务。   OSS 具有与平台无关的 RESTful ...

osc_d7or6cwg
04/30
22
0
如何利用云存储网关搭建FTP服务器访问OSS存储

https://yq.aliyun.com/articles/743608 背景 云存储文件网关是阿里云提供的存储网关产品,它可以满足用户通过NFS或Samba等协议访问OSS对象存储数据的需求。而通过简单的配置,我们也可以基于...

osc_b1kaj6np
03/19
1
0
【SRE学堂第一讲】OSS从入门到精通 - 产品综述

前言 阿里云SRE团队首次推出SRE学堂,我们精选了广大客户主流部署的云产品进行由浅入深的系列介绍,目的是让使用阿里云的客户对产品有一个相对全面的了解。同时也希望读者能够反馈后续希望学...

阿里云SRE团队小编
06/02
0
0
OSS对象存储

OSS对象存储 一、产品概述 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。它具有与平台无关的RESTful API接口,能够提供...

baishuchao
2017/08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

设计模式(4) 建造者模式

什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了...

zhixin9001
15分钟前
14
0
ArrayList源码分析 —— JDK8

ArrayList的特性 ArrayList内部使用数据作为存储结构,ArrayList可以理解为数组的扩展对象,封装了常用的和非常用的操作数组的方法。以及当数组长度不足以保存数组时,自动扩容数组,通常Arr...

XuePeng77
21分钟前
32
0
__slots__的用法? - Usage of __slots__?

问题: Python中__slots__的目的是什么-尤其是关于何时以及何时不使用它的目的? 解决方案: 参考一: https://stackoom.com/question/1ymu/slots-的用法 参考二: https://oldbug.net/q/1ym...

富含淀粉
32分钟前
17
0
Python分析42年高考数据,告诉你高考为什么这么难?

作者:徐麟 历年录取率 可能很多经历过高考的人都不知道高考的全称,高考实际上是普通高等学校招生全国统一考试的简称。从1977年国家恢复高考制度至今,高考经历了许多的改革,其中最为显著的...

爱码小哥
34分钟前
19
0
CKEditor 5 + SpringBoot实战(四):SpringBoot 实现文件上传

在本系列的文章中,我将介绍如何在Spring Boot Application中使用CKEditor编辑器。介绍的内容包括基本环境的搭建,文件上传,SpringData JPA数据持久化,CKEditor5的安装,CKEditor图片上传,...

树下魅狐
36分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部