python 上传文件到网络设备_基于python实现上传文件到OSS代码实例

基础环境

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

# endpoint以杭州为例,其它region请按实际情况填写。

bucket = oss2.bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

# 必须以二进制的方式打开文件,因为需要知道文件包含的字节数。

with open('', 'rb') as fileobj:

# seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传,直到文件结束。

fileobj.seek(1000, os.seek_set)

# tell方法用于返回当前位置。

current = fileobj.tell()

bucket.put_object('', 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('', '')

# endpoint以杭州为例,其它region请按实际情况填写。

bucket = oss2.bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

key = ''

filename = ''

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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值