基于python实现上传文件到OSS代码实例

作者:COOLOPS 时间:2022-12-14 16:45:17 

基础环境


# +++++ 阿里云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()

来源:https://www.cnblogs.com/coolops/p/12841334.html

标签:python,上传,文件,OSS
0
投稿

猜你喜欢

  • Python学习之流程控制与条件判断总结

    2023-08-20 13:37:02
  • Thinkphp5.0框架视图view的循环标签用法示例

    2024-06-05 09:22:48
  • mysql 5.6.26 winx64安装配置图文教程(一)

    2024-01-14 21:44:59
  • java实现的连接oracle/mysql数据库功能简单示例【附oracle+mysql数据库驱动包】

    2024-01-14 11:26:55
  • Python实现FTP弱口令扫描器的方法示例

    2023-12-16 04:46:45
  • 一篇文章入门Python生态系统(Python新手入门指导)

    2023-11-03 01:12:00
  • python解析模块(ConfigParser)使用方法

    2022-06-15 11:39:06
  • 用Dreamweaver MX设计各种网页鼠标样式

    2008-10-04 10:18:00
  • python3.6使用urllib完成下载的实例

    2023-08-03 21:21:13
  • 编写一个javascript元循环求值器的方法

    2024-04-23 09:28:15
  • 详解git合并冲突解决方法

    2023-05-11 05:18:34
  • 详解pyqt5 动画在QThread线程中无法运行问题

    2021-07-22 21:00:43
  • MySQL基础教程之IN的用法详解

    2024-01-16 19:36:32
  • MAC中PyCharm设置python3解释器

    2021-04-18 08:36:17
  • JSP + Servlet实现生成登录验证码示例

    2023-06-27 02:47:59
  • Python实现指定数组下标值正序与倒序排序算法功能举例

    2023-04-03 10:37:26
  • python列表与列表算法详解

    2022-09-20 20:36:51
  • 无阻塞加载脚本分析[全]

    2024-04-17 10:25:35
  • PyCharm 2020.2下配置Anaconda环境的方法步骤

    2022-10-08 14:25:00
  • django 实现编写控制登录和访问权限控制的中间件方法

    2021-04-26 21:08:53
  • asp之家 网络编程 m.aspxhome.com