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

使用限制

通过追加上传的方式上传文件时,有如下限制:

  • 如果文件不存在,则调用AppendObject接口会创建一个可追加类型的文件。
  • 如果文件已存在,且为可追加类型文件时,若设置的追加位置和文件当前长度不等,则抛出PositionNotEqualToLength异常。如果文件已存在,且为不可追加类型文件时,则抛出ObjectNotAppendable异常。
  • 追加类型的文件暂不支持CopyObject操作。

有关追加上传的更多信息,请参见AppendObject

追加上传本地文件

通过追加上传的方式将本地文件上传至指定Bucket的示例代码如下:

 <?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以杭州为例,其它Region请按实际情况填写。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 设置Bucket名称。
$bucket= "<yourBucketName>";
// 设置Object名称。即填写不包含Bucket名称在内的Object的完整路径,例如example/folder/abc.jpg。
$object = "<yourObjectName>";
// 获取本地文件1。即填写本地文件的完整路径,例如/users/local/abc.jpg。
$filePath = "<yourLocalFile1>";
// 获取本地文件2。即填写本地文件的完整路径,例如/users/local/example.txt。
$filePath1 = "<yourLocalFile2>";
try{
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

    $position = $ossClient->appendFile($bucket, $object, $filePath, 0);
    $position = $ossClient->appendFile($bucket, $object, $filePath1, $position);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");
            

有关Bucket名称命名规范的更多信息,请参见存储空间(Bucket)。有关Object名称命名规范的更多信息,请参见对象(Object)

追加上传字符串

通过追加上传的方式将字符串上传至指定Bucket的示例代码如下:

<?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以杭州为例,其它Region请按实际情况填写。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 设置Bucket名称。
$bucket= "<yourBucketName>";
// 设置Object名称。即不包含Bucket名称在内的Object的完整路径,例如example/folder/abc.jpg。
$object = "<yourObjectName>";
// 表示第一次、第二次以及第三次追加上传后获取的文件内容分别为Hello OSS、Hi OSS以及OSS OK。
$content_array = array('Hello OSS', 'Hi OSS', 'OSS OK');
try{
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

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