基于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解析xml文件实例分析
May 27 Python
python解析基于xml格式的日志文件
Feb 25 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
如何使用Python的Requests包实现模拟登陆
Apr 27 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
tensorflow使用神经网络实现mnist分类
Sep 08 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
Nov 30 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
python中shell执行知识点
May 06 Python
python实现126邮箱发送邮件
May 20 Python
Python之字典对象的几种创建方法
Sep 30 Python
Python pickle模块常用方法代码实例
Oct 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
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
php异常处理方法实例汇总
2015/06/24 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
PHP实现的简单分页类及用法示例
2016/05/06 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
js常见遍历操作小结
2019/06/06 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
2020/03/03 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
Python函数装饰器实现方法详解
2018/12/22 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
什么是java序列化,如何实现java序列化
2012/11/14 面试题
如何开发安全的AJAX应用
2014/03/26 面试题
房地产销售经理岗位职责
2014/01/01 职场文书
忠诚教育心得体会
2014/09/03 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
2019年教师节祝福语精选,给老师送上真诚的祝福
2019/09/09 职场文书