基于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中的wxPython实现最基本的浏览器功能
Apr 14 Python
Python的Django框架中的URL配置与松耦合
Jul 15 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
Django 导出 Excel 代码的实例详解
Aug 11 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
Python中的 sort 和 sorted的用法与区别
Aug 10 Python
如何搭建pytorch环境的方法步骤
May 06 Python
利用python下载scihub成文献为PDF操作
Jul 09 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 Python
python随机打印成绩排名表
Jun 23 Python
5个pandas调用函数的方法让数据处理更加灵活自如
Apr 24 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最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
Python之re操作方法(详解)
2017/06/14 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
Python画图高斯分布的示例
2019/07/10 Python
Python操作Mongodb数据库的方法小结
2019/09/10 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
MYSQL基础面试题
2012/05/13 面试题
标准导师推荐信(医学类)
2013/10/28 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
超市创业计划书
2014/09/15 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
大学生求职信怎么写
2015/03/19 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书