基于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中使用成员运算符的示例
May 13 Python
Django中使用locals()函数的技巧
Jul 16 Python
PyQt5每天必学之事件与信号
Apr 20 Python
linux下python使用sendmail发送邮件
May 22 Python
pycharm中成功运行图片的配置教程
Oct 28 Python
Python使用LDAP做用户认证的方法
Jun 20 Python
详解python和matlab的优势与区别
Jun 28 Python
Python实现串口通信(pyserial)过程解析
Sep 25 Python
Python selenium爬取微博数据代码实例
May 22 Python
如何用Python 加密文件
Sep 10 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 Python
Python各协议下socket黏包问题原理
Apr 12 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
使用Apache的rewrite技术
2006/06/22 PHP
深入理解PHP变量的值类型和引用类型
2015/10/21 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
vue.js实现备忘录demo
2019/06/26 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
python如何支持并发方法详解
2020/07/25 Python
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
linux面试题参考答案(9)
2016/01/29 面试题
产品促销活动策划书
2014/01/15 职场文书
社会学专业求职信
2014/02/24 职场文书
数学检讨书1000字
2014/02/24 职场文书
2014年评职称工作总结
2014/11/20 职场文书
个人先进事迹材料
2014/12/29 职场文书
学校德育工作总结2015
2015/05/11 职场文书
步步惊心观后感
2015/06/12 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python