基于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调用机器喇叭发出蜂鸣声(Beep)的方法
Mar 23 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
了解不常见但是实用的Python技巧
May 23 Python
PyTorch中Tensor的维度变换实现
Aug 18 Python
python集合常见运算案例解析
Oct 17 Python
python垃圾回收机制(GC)原理解析
Dec 30 Python
TensorFlow 读取CSV数据的实例
Feb 05 Python
基于python实现对文件进行切分行
Apr 26 Python
Python控制台实现交互式环境执行
Jun 09 Python
keras得到每层的系数方式
Jun 15 Python
如何让python的运行速度得到提升
Jul 08 Python
python文本处理的方案(结巴分词并去除符号)
May 26 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
德生PL330的评价与改造
2021/03/02 无线电
JAVA/JSP学习系列之二
2006/10/09 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
python实现画圆功能
2018/01/25 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
详解python中@的用法
2019/03/27 Python
python实现统计文本中单词出现的频率详解
2019/05/20 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
客房主管岗位职责
2013/12/09 职场文书
促销活动策划方案
2014/01/12 职场文书
骨干教师培训制度
2014/01/13 职场文书
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python