# -*- coding: utf-8 -*-
"""
KS3 SDK 流上传示例
演示如何使用新添加的 set_contents_from_stream 和 set_contents_from_stream_simple 方法
"""

import os
from io import BytesIO
from ks3.connection import Connection
from ks3.bucket import Bucket

# 配置信息 - 请根据实际情况修改
AK = os.getenv('KS3_IAM_ACCESS_KEY_ID', '<YOUR_ACCESS_KEY>')
SK = os.getenv('KS3_IAM_ACCESS_KEY_SECRET', '<YOUR_SECRET_KEY>')
BUCKET_NAME = os.getenv('KS3_BUCKET', '<YOUR_BUCKET_NAME>')
ENDPOINT = 'ks3-cn-shanghai.ksyuncs.com'

def test_stream_upload():
    """测试流上传功能"""
    # 初始化连接
    conn = Connection(AK, SK, host=ENDPOINT, is_secure=True)

    # 获取存储桶
    bucket = conn.get_bucket(BUCKET_NAME)
    print("1. 使用完整参数版本上传...")
    memory_stream2 = BytesIO(b"Hello, KS3 Stream Upload! This is a test with full parameters.")
    key3 = bucket.new_key('stream_test/full_params_stream.txt')
    result3 = key3.set_contents_from_stream(
        stream=memory_stream2,
        headers={'Content-Type': 'text/plain'},
        replace=True,
        policy='private'
    )
    print(f"   上传结果: status={result3.status}, request_id={result3.response_metadata.request_id}")

    # # 2. 带进度回调的上传
    # print("2. 带进度回调的上传...")
    # def progress_callback(sent, total):
    #     if total > 0:
    #         print(f"   上传进度: {sent}/{total} bytes ({sent/total*100:.1f}%)")
    #
    # large_data = BytesIO(b'A' * 1024 * 100)  # 100KB的数据
    # key4 = bucket.new_key('stream_test/large_data_stream.txt')
    # result4 = key4.set_contents_from_stream(
    #     stream=large_data,
    #     cb=progress_callback,
    #     num_cb=5
    # )
    # print(f"   上传结果: status={result4.status}, request_id={result4.response_metadata.request_id}")

    # 清理临时文件
    try:
        os.remove('/tmp/test_stream_upload.txt')
    except:
        pass

    print("\n=== 所有测试完成 ===")

if __name__ == '__main__':
    test_stream_upload()