You need to enable JavaScript to run this app.
导航

追加上传(PHP SDK)

最近更新时间2024.02.04 18:30:58

首次发布时间2022.11.16 14:58:44

追加上传可实现对同一个对象追加数据内容的功能。本文介绍追加上传的示例代码。

注意事项

追加上传时,对象的大小限制说明如下:

  • 每次追加上传的大小不能小于 128KiB,追加后的对象大小不能大于 5GiB。
  • 对于通过追加上传创建的对象,进行普通上传操作,对象被覆盖且对象类型会发生变化。
  • 通过普通上传创建的对象不支持追加上传。
  • 通过追加上传创建的对象不支持拷贝。
  • 如果您的桶处于开启或者暂停多版本功能的状态下,或存储桶的类型为低频存储,则无法通过追加上传创建对象。

示例代码

您可以通过 TosClient->appendObject 实现追加上传,示例代码如下:

<?php

// 假设使用 composer 安装
require_once __DIR__ . '/vendor/autoload.php';

use Tos\TosClient;
use Tos\Exception\TosClientException;
use Tos\Exception\TosServerException;
use Tos\Model\AppendObjectInput;
use Tos\Model\Enum;

try {
    $client = new TosClient([
        'region' => 'your region',
        'endpoint' => 'your endpoint',
        // 从环境变量中获取访问密钥
        'ak' => getenv('TOS_ACCESS_KEY'),
        'sk' => getenv('TOS_SECRET_KEY'),
    ]);
    
    // 上传字符串
    $content = 'hello world'
    $input = new AppendObjectInput('bucket-test',  'key-test');
    // 设置对象 ACL,仅第一次追加上传有效
    $input->setACL(Enum::ACLPublicRead);
    // 设置对象 StorageClass,仅第一次追加上传有效
    $input->setStorageClass(Enum::StorageClassStandard);
    // 设置对象自定义元数据,仅第一次追加上传有效
    $input->setMeta(['aaa' => 'bbb', '中文键' => '中文值']);
    // 设置对象 Content-Type,仅第一次追加上传有效
    $input->setContentType('text/plain');
    
    // 每次追加上传的数据大小不能小于 128 KB,这里在内存中构造一段长字符串
    $content = '';
    for ($i = 0; $i < 20000; $i++) {
        $content .= uniqid();
    }
    $input->setContent($content);
    
    $output = $client->appendObject($input);
    echo $output->getRequestId() . PHP_EOL;
    
    // 下一次追加上传的起始位置
    $nextAppendOffset = $output->getNextAppendOffset();
    
    $input->setOffset($nextAppendOffset);
    $content2 = '';
    for ($i = 0; $i < 20000; $i++) {
        $content2 .= uniqid();
    }
    $input->setContent($content2);
    
    $output = $client->appendObject($input);
    echo $output->getRequestId() . PHP_EOL;
    echo $output->getNextAppendOffset() . PHP_EOL;
    
} catch (TosClientException $ex) {
    echo $ex->getMessage() . PHP_EOL;
} catch (TosServerException $ex) {
    echo $ex->getRequestId() . PHP_EOL;
    echo $ex->getStatusCode() . PHP_EOL;
    echo $ex->getErrorCode() . PHP_EOL;
}