基于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 代码优化详解
Oct 27 Python
Python抽象类的新写法
Jun 18 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
Python调用系统底层API播放wav文件的方法
Aug 11 Python
树莓派极简安装OpenCv的方法步骤
Oct 10 Python
使用pandas 将DataFrame转化成dict
Dec 10 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
Matplotlib中%matplotlib inline如何使用
Jul 28 Python
python如何利用Mitmproxy抓包
Oct 10 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
Pytorch 如何实现LSTM时间序列预测
May 17 Python
Python自动化测试PO模型封装过程详解
Jun 22 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+dbfile开发小型留言本
2006/10/09 PHP
8个PHP数组面试题
2015/06/23 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
jQuery验证Checkbox是否选中的代码 推荐
2011/09/04 Javascript
jQuery(非HTML5)可编辑表格实现代码
2012/12/11 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
微信小程序页面生命周期详解
2018/01/31 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
js实现左右轮播图
2020/01/09 Javascript
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
2019/02/11 Python
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
记者岗位职责
2014/01/06 职场文书
探亲邀请信范文
2014/01/30 职场文书
集体备课反思
2014/02/12 职场文书
员工安全生产承诺书
2014/05/22 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
个人向公司借款协议书
2016/03/19 职场文书