基于python实现上传文件到OSS代码实例


Posted in Python onMay 09, 2020

基础环境

# +++++ 阿里云OSS开发指南里都有详细的步骤,在这里整理了一下自己需要的东西
# 确定开发环境,centOS默认安装了python2.7
# python -V
# 安装python开发包
# yum install -y python-devel
# 安装OSS的sdk
# yum install -y python-pip
# pip2.7 install oss2
# 验证oss2是否安装正确
'''
>>> import oss2
>>> oss2.__version__
'2.6.0'
'''
# 验证OSS扩展库crcmod是否安装
'''
在python环境中,输入一下内容,如果有错误信息,则说明扩展库安装不成功,默认安装oss2的时候会安装扩展库
>>> import crcmod._crcfunext
如果出现安装不成功,则按一下步骤安装:
1、执行以下命令卸载crcmod
# pip uninstall crcmod
2、安装python-devel
3、执行以下命令重新安装crcmod
# pip install crcmod
'''

小文件上传

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')

# 必须以二进制的方式打开文件,因为需要知道文件包含的字节数。
with open('<yourLocalFile>', 'rb') as fileobj:
  # Seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传,直到文件结束。
  fileobj.seek(1000, os.SEEK_SET)
  # Tell方法用于返回当前位置。
  current = fileobj.tell()
  bucket.put_object('<yourObjectName>', fileobj)

分片上传

# -*- coding: utf-8 -*-import os
from oss2 import SizedFileAdapter, determine_part_size
from oss2.models import PartInfo
import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')

key = '<yourObjectName>'
filename = '<yourLocalFile>'

total_size = os.path.getsize(filename)
# determine_part_size方法用来确定分片大小。
part_size = determine_part_size(total_size, preferred_size=100 * 1024)

# 初始化分片。
upload_id = bucket.init_multipart_upload(key).upload_id
parts = []

# 逐个上传分片。
with open(filename, 'rb') as fileobj:
  part_number = 1
  offset = 0
  while offset < total_size:
    num_to_upload = min(part_size, total_size - offset)
        # SizedFileAdapter(fileobj, size)方法会生成一个新的文件对象,重新计算起始追加位置。
    result = bucket.upload_part(key, upload_id, part_number,
                  SizedFileAdapter(fileobj, num_to_upload))
    parts.append(PartInfo(part_number, result.etag))

    offset += num_to_upload
    part_number += 1

# 完成分片上传。
bucket.complete_multipart_upload(key, upload_id, parts)

# 验证分片上传。
with open(filename, 'rb') as fileobj:
  assert bucket.get_object(key).read() == fileobj.read()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python爬虫之模拟知乎登录的方法教程
May 25 Python
Python实现随机漫步功能
Jul 09 Python
python批量赋值操作实例
Oct 22 Python
python中aioysql(异步操作MySQL)的方法
Apr 11 Python
Python基本数据结构之字典类型dict用法分析
Jun 08 Python
PyCharm第一次安装及使用教程
Jan 08 Python
PyTorch实现AlexNet示例
Jan 14 Python
django项目中新增app的2种实现方法
Apr 01 Python
Django Channel实时推送与聊天的示例代码
Apr 30 Python
pytorch 常用函数 max ,eq说明
Jun 28 Python
深入探讨opencv图像矫正算法实战
May 21 Python
python中的None与NULL用法说明
May 25 Python
使用python创建生成动态链接库dll的方法
May 09 #Python
浅析python 动态库m.so.1.0错误问题
May 09 #Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
May 09 #Python
Python发送邮件封装实现过程详解
May 09 #Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 #Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 09 #Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 #Python
You might like
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
社区(php&amp;&amp;mysql)六
2006/10/09 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
详解js的六大数据类型
2016/12/27 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
python实现批量改文件名称的方法
2015/05/25 Python
python select.select模块通信全过程解析
2017/09/20 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
2017/11/06 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
python添加菜单图文讲解
2019/06/04 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
什么时候用assert
2015/05/08 面试题
学生社团文化节开幕式主持词
2014/03/28 职场文书
2014年老干部工作总结
2014/11/21 职场文书
2014年司法所工作总结
2014/11/22 职场文书
小学校园广播稿
2015/08/18 职场文书
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis