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('<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()
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。