基于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的urllib库提交WEB表单
Feb 24 Python
Python使用稀疏矩阵节省内存实例
Jun 27 Python
Django框架中数据的连锁查询和限制返回数据的方法
Jul 17 Python
json跨域调用python的方法详解
Jan 11 Python
python中单例常用的几种实现方法总结
Oct 13 Python
浅析python的优势和不足之处
Nov 20 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
python opencv图片编码为h264文件的实例
Dec 12 Python
python实现猜拳游戏
Mar 04 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 Python
python相对企业语言优势在哪
Jun 12 Python
django中cookiecutter的使用教程
Dec 03 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 XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
2011/10/29 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
Mootools 1.2教程 事件处理
2009/09/15 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
javascript实现yield的方法
2013/11/06 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
python中的多重继承实例讲解
2014/09/28 Python
python用requests实现http请求代码实例
2019/10/31 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
医学护理系毕业生求职信
2013/10/01 职场文书
给分销商的致歉信
2014/01/14 职场文书
学习十八大报告感言
2014/02/28 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
党员对照检查材料
2014/09/22 职场文书
上课说话检讨书
2015/01/27 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
go设置多个GOPATH的方式
2021/05/05 Golang