基于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的SimPy库简化复杂的编程模型的介绍
Apr 13 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
在Python中操作列表之list.extend()方法的使用
May 20 Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 Python
Python判断文本中消息重复次数的方法
Apr 27 Python
微信 用脚本查看是否被微信好友删除
Oct 28 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
python3 拼接字符串的7种方法
Sep 12 Python
Python3.5 Pandas模块之Series用法实例分析
Apr 23 Python
python加载自定义词典实例
Dec 06 Python
python 实现图片裁剪小工具
Feb 02 Python
python3.9之你应该知道的新特性详解
Apr 29 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配置参数总结
2013/06/14 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
javascript getElementsByClassName函数
2010/04/01 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
利用python获得时间的实例说明
2013/03/25 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
TensorFlow的权值更新方法
2018/06/14 Python
Python3连接SQLServer、Oracle、MySql的方法
2018/06/28 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
PyQt5实现登录页面
2020/05/30 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
名人演讲稿范文
2013/12/28 职场文书
初中科学教学反思
2014/01/21 职场文书
电子银行营销方案
2014/02/22 职场文书
霸王洗发水广告词
2014/03/14 职场文书
降消项目实施方案
2014/03/30 职场文书
马智宇结婚主持词
2014/04/01 职场文书
精神文明建设标语
2014/06/16 职场文书
反腐倡廉观后感
2015/06/08 职场文书
公司规章制度范本
2015/08/03 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书
JavaScript中isPrototypeOf函数
2021/11/07 Javascript