基于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发送邮件的实例代码(支持html、图片、附件)
Mar 04 Python
python刷投票的脚本实现代码
Nov 08 Python
详解python的ORM中Pony用法
Feb 09 Python
python中scikit-learn机器代码实例
Aug 05 Python
Python高级特性之闭包与装饰器实例详解
Nov 19 Python
Python多线程获取返回值代码实例
Feb 17 Python
python pyecharts 实现一个文件绘制多张图
May 13 Python
Django form表单与请求的生命周期步骤详解
Jun 07 Python
python用什么编辑器进行项目开发
Jun 17 Python
python如何运行js语句
Sep 09 Python
Python3如何使用range函数替代xrange函数
Oct 05 Python
python库Tsmoothie模块数据平滑化异常点抓取
Jun 10 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
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
基于empty函数的输出详解
2013/06/17 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
Node.js的特点详解
2017/02/03 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
原生js实现照片墙效果
2020/10/13 Javascript
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
python 函数内部修改外部变量的方法
2018/12/18 Python
python实现小球弹跳效果
2019/05/10 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
乌克兰在线商店的价格比较:Price.ua
2019/07/26 全球购物
在校生钳工实习自我鉴定
2013/09/19 职场文书
师范毕业生自荐信
2013/10/17 职场文书
法律工作求职自荐信
2013/10/31 职场文书
积极贯彻学习两会精神总结
2014/03/17 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis