基于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访问系统环境变量的方法
Apr 29 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
python+django加载静态网页模板解析
Dec 12 Python
对python中dict和json的区别详解
Dec 18 Python
对Python发送带header的http请求方法详解
Jan 02 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
Python try except异常捕获机制原理解析
Apr 18 Python
python 实现倒计时功能(gui界面)
Nov 11 Python
Python中相见恨晚的技巧
Apr 13 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 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
php intval的测试代码发现问题
2008/07/27 PHP
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
PHP仿盗链代码
2012/06/03 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
Javascript 闭包引起的IE内存泄露分析
2012/05/23 Javascript
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
Python使用装饰器进行django开发实例代码
2018/02/06 Python
python+ffmpeg视频并发直播压力测试
2018/03/06 Python
python导入坐标点的具体操作
2019/05/10 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
python 循环数据赋值实例
2019/12/02 Python
在django中自定义字段Field详解
2019/12/03 Python
CSS3中的@keyframes关键帧动画的选择器绑定
2016/06/13 HTML / CSS
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
教师专业理论水平的自我评价分享
2013/11/09 职场文书
大学生预备党员自我评价分享
2013/11/16 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
小学教师见习总结
2015/06/23 职场文书
小学总务工作总结
2015/08/13 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
教你用Python matplotlib库制作简单的动画
2021/06/11 Python
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技