基于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中处理字符串之ljust()方法的使用简介
May 19 Python
在python中按照特定顺序访问字典的方法详解
Dec 14 Python
Python动态赋值的陷阱知识点总结
Mar 17 Python
python 发送json数据操作实例分析
Oct 15 Python
python实现根据文件格式分类
Oct 31 Python
python tkinter控件布局项目实例
Nov 04 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
python实现马丁策略的实例详解
Jan 15 Python
Python字符串的15个基本操作(小结)
Feb 03 Python
Django cookie和session的应用场景及如何使用
Apr 29 Python
Python中super().__init__()测试以及理解
Dec 06 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
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
React和Vue中监听变量变化的方法
2018/11/14 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
python程序变成软件的实操方法
2019/06/24 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
Python守护进程实现过程详解
2020/02/10 Python
pytorch中的inference使用实例
2020/02/20 Python
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
计算机专业毕业生求职信分享
2013/12/24 职场文书
客户服务经理岗位职责
2014/01/29 职场文书
创业计划书模版
2014/02/05 职场文书
婚前协议书
2014/04/15 职场文书
党员志愿者活动总结
2014/06/26 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
Android studio 简单计算器的编写
2022/05/20 Java/Android