基于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的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
python使用threading获取线程函数返回值的实现方法
Nov 15 Python
Python enumerate索引迭代代码解析
Jan 19 Python
Python简单定义与使用二叉树示例
May 11 Python
用于业余项目的8个优秀Python库
Sep 21 Python
Python检查ping终端的方法
Jan 26 Python
django框架model orM使用字典作为参数,保存数据的方法分析
Jun 24 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
Aug 12 Python
20行Python代码实现视频字符化功能
Apr 13 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 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
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
Jquery解析json字符串及json数组的方法
2015/05/29 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
Bootstrap实现水平排列的表单
2016/07/04 Javascript
微信小程序 Video API实例详解
2016/10/02 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
基于nodejs 的多页面爬虫实例代码
2017/05/31 NodeJs
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
Vue精简版风格概述
2018/01/30 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
js DOM的事件常见操作实例详解
2019/12/16 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
快速了解Python中的装饰器
2018/01/11 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
python文件排序的方法总结
2020/09/13 Python
2013年员工自我评价范文
2013/12/27 职场文书
《藏戏》教学反思
2014/02/11 职场文书
爱之链教学反思
2014/04/30 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
装修公司管理制度
2015/08/05 职场文书
会议室使用管理制度
2015/08/06 职场文书
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL