基于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 实现归并排序算法
Jun 05 Python
python设置检查点简单实现代码
Jul 01 Python
使用PDB模式调试Python程序介绍
Apr 05 Python
Django框架下在URLconf中指定视图缓存的方法
Jul 23 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
使用python+whoosh实现全文检索
Dec 09 Python
python实现低通滤波器代码
Feb 26 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
Apr 22 Python
PyQt5 QDockWidget控件应用详解
Aug 12 Python
Python命令行参数argv和argparse该如何使用
Feb 08 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 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
php 获取百度的热词数据的代码
2012/02/18 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
yii框架无限极分类的实现方法
2017/04/08 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
python爬虫请求头设置代码
2020/07/28 Python
幼儿园安全教育随笔
2015/08/14 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android