追加上传是指通过AppendObject方法在已上传的追加类型文件(Appendable Object)末尾直接追加内容。

注意事项

  • 当文件不存在时,调用AppendObject接口会创建一个追加类型文件。
  • 当文件已存在时,如果文件为追加类型文件,且设置的追加位置和文件当前长度相等,则直接在该文件末尾追加内容;如果文件为追加类型文件,但是设置的追加位置和文件当前长度不相等,则抛出PositionNotEqualToLength异常;如果文件为非追加类型文件时,则抛出ObjectNotAppendable异常。
  • 追加类型文件暂不支持CopyObject操作。

追加上传字符串

以下代码用于通过追加上传的方式将字符串依次上传到目标存储空间examplebucket中的srcexampleobject.txt文件。

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;

// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
$accessKeyId = "yourAccessKeyId";
$accessKeySecret = "yourAccessKeySecret";
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。关于Region与Endpoint对应关系的更多信息,请参见访问域名和数据中心。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 填写Bucket名称。关于Bucket名称命名规范的更多信息,请参见Bucket。
$bucket= "examplebucket";
// 填写不包含Bucket名称在内的Object的完整路径。关于Object名称命名规范的更多信息,请参见对象(Object)。
$object = "srcexampleobject.txt";
// 设置依次追加上传的字符串。第一次、第二次以及第三次追加上传后获取的文件内容分别为Hello OSS、Hi OSS以及OSS OK。
$content_array = array('Hello OSS', 'Hi OSS', 'OSS OK');

$options = array(
    'headers' => array(
        // 指定该Object被下载时的网页缓存行为。
        // 'Cache-Control' => 'no-cache',
        // 指定该Object被下载时的名称。
        // 'Content-Disposition' => 'attachment;filename=oss_download.jpg',
        // 指定该Object的内容编码格式。
        // 'Content-Encoding' => 'utf-8',
        // 指定过期时间。
        // 'Expires' => 'Fri, 31 Dec 2021 16:57:01 GMT',
        // 指定追加上传时是否覆盖同名Object。此处设置为true,表示禁止覆盖同名Object。
        // 'x-oss-forbid-overwrite' => 'true',
        // 指定上传该Object的每个part时使用的服务器端加密方式。
        // 'x-oss-server-side-encryption'=> 'AES256',
        // 指定Object的加密算法。
        // 'x-oss-server-side-data-encryption'=>'SM4',
        // 指定Object的存储类型。
        // 'x-oss-storage-class' => 'Standard',
        // 指定Object的访问权限。
        // 'x-oss-object-acl' => 'private',
        ),
);

try{
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

    // 第一次追加上传。第一次追加的位置是0,返回值为下一次追加的位置。后续追加的位置是追加前文件的长度。
    $position = $ossClient->appendObject($bucket, $object, $content_array[0], 0,$options);
    $position = $ossClient->appendObject($bucket, $object, $content_array[1], $position,$options);
    $position = $ossClient->appendObject($bucket, $object, $content_array[2], $position,$options);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");           

追加上传本地文件

以下代码用于通过追加上传的方式将本地文件examplefilea.txt、examplefileb.txt和examplefilec.txt的内容依次上传到目标存储空间examplebucket中的exampleobject.txt文件。

 <?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;

// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
$accessKeyId = "yourAccessKeyId";
$accessKeySecret = "yourAccessKeySecret";
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 填写Bucket名称。
$bucket= "examplebucket";
// 填写不包含Bucket名称在内的Object的完整路径。
$object = "exampleobject.txt";
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
$filePath = "D:\\localpath\\examplefilea.txt";
$filePath1 = "D:\\localpath\\examplefileb.txt";
$filePath2 = "D:\\localpath\\examplefilec.txt";

try{
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
    // 第一次追加上传。第一次追加的位置是0,返回值为下一次追加的位置。后续追加的位置是追加前文件的长度。
    $position = $ossClient->appendFile($bucket, $object, $filePath, 0);
    $position = $ossClient->appendFile($bucket, $object, $filePath1, $position);
    $position = $ossClient->appendFile($bucket, $object, $filePath2, $position);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");            

相关文档

关于追加上传的API接口说明,请参见AppendObject