文档

iOS追加上传

更新时间:

追加上传指的是使用OSS API中的AppendObject在已上传的Appendable Object类型文件后直接追加内容。

注意事项

  • 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心

  • 本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见Java配置访问凭证

  • 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见新建OSSClient

  • 要追加上传,您必须有oss:PutObject权限。具体操作,请参见为RAM用户授权自定义的权限策略

  • 当文件不存在时,调用AppendObject接口会创建一个追加类型文件。

  • 当文件已存在时:

    • 如果文件为追加类型文件,且设置的追加位置和文件当前长度相等,则直接在该文件末尾追加内容。

    • 如果文件为追加类型文件,但是设置的追加位置和文件当前长度不相等,则抛出PositionNotEqualToLength异常。

    • 如果文件为非追加类型文件时,例如通过简单上传的文件类型为Normal的文件,则抛出ObjectNotAppendable异常。

  • 追加类型文件暂不支持CopyObject操作。

示例代码

以下代码用于追加上传文件。

OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];
// 配置以下必填字段,其中bucketName为存储空间名称;objectKey等同于objectName,表示追加上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
append.bucketName = @"<bucketName>";
append.objectKey = @"<objectKey>";
// 指定首次进行追加上传的位置。
append.appendPosition = 0; 
NSString * docDir = [self getDocumentDirectory];
append.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];
// 以下为可选字段。
append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
    NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
// append.contentType = @"";
// append.contentMd5 = @"";
// append.contentEncoding = @"";
// append.contentDisposition = @"";
OSSTask * appendTask = [client appendObject:append];
[appendTask continueWithBlock:^id(OSSTask *task) {
    NSLog(@"objectKey: %@", append.objectKey);
    if (!task.error) {
        NSLog(@"append object success!");
        OSSAppendObjectResult * result = task.result;
        NSString * etag = result.eTag;
        long nextPosition = result.xOssNextAppendPosition;
    } else {
        NSLog(@"append object failed, error: %@" , task.error);
    }
    return nil;
}];

相关文档

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