基于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 SqlAlchemy
Feb 12 Python
Python中字符串的修改及传参详解
Nov 30 Python
详解python之多进程和进程池(Processing库)
Jun 09 Python
Python实现简单网页图片抓取完整代码实例
Dec 15 Python
Python3实现带附件的定时发送邮件功能
Dec 22 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
完美解决在oj中Python的循环输入问题
Jun 25 Python
windows下安装Python虚拟环境virtualenvwrapper-win
Jun 14 Python
python将图片转base64,实现前端显示
Jan 09 Python
python实现滑雪者小游戏
Feb 22 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
python解包用法详解
Feb 17 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
ThinkPHP标签制作教程
2014/07/10 PHP
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
jQuery DOM操作小结与实例
2010/01/07 Javascript
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
python 换位密码算法的实例详解
2017/07/19 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
python绘制多个子图的实例
2019/07/07 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
法雷奥SQA(electric)面试问题
2016/01/23 面试题
移动通信行业实习自我鉴定
2013/09/28 职场文书
如何写毕业求职自荐信
2013/11/06 职场文书
营销专业应届生求职信
2013/11/26 职场文书
暑期社会实践方案
2014/02/05 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
科学发展观标语
2014/10/08 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
goland 恢复已更改文件的操作
2021/04/28 Golang