更新时间:2024-06-18 GMT+08:00
追加上传
追加上传可实现对同一个对象追加数据内容的功能。您可以通过appendObject进行追加上传。示例代码如下:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"FileName" ofType:@"FileSuffix"]; NSFileManager *manager = [NSFileManager defaultManager]; NSDictionary *fileDic = [manager attributesOfItemAtPath:filePath error:nil]; unsigned long long size = [[fileDic objectForKey:NSFileSize] longLongValue]; int filesize = size; //第一次追加上传 OBSAppendObjectWithFileRequest *request = [[OBSAppendObjectWithFileRequest alloc] initWithBucketName:@"bucketName" objectKey:@"objectname" uploadFilePath:filePath]; request.position = [NSNumber numberWithFloat:0]; request.uploadProgressBlock = ^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { NSLog(@"%0.1f%%",(float)floor(totalBytesSent*10000/totalBytesExpectedToSend)/100); }; __block NSString* nextPosition = nil; [client appendObject:request completionHandler:^(OBSAppendObjectResponse *response, NSError *error) { NSLog(@"%@",response); //下次上传位置 NSDictionary *temp = [response headers]; nextPosition = [temp valueForKey:@"x-obs-next-append-position"]; NSLog(@"nextPosition:%@", nextPosition); }]; //第二次追加上传 request = [[OBSAppendObjectWithFileRequest alloc] initWithBucketName:@"bucketName" objectKey:@"objectname" uploadFilePath:filePath]; int nextPositionInt = [nextPosition intValue]; request.position = [NSNumber numberWithInt:nextPositionInt]; request.uploadProgressBlock = ^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { NSLog(@"%0.1f%%",(float)floor(totalBytesSent*10000/totalBytesExpectedToSend)/100); }; [client appendObject:request completionHandler:^(OBSAppendObjectResponse *response, NSError *error) { NSLog(@"%@",response); //下次上传位置 NSDictionary *temp = [response headers]; nextPosition = [temp valueForKey:@"x-obs-next-append-position"]; NSLog(@"nextPosition:%@", nextPosition); }];
- putObject上传的对象可覆盖appendObject上传的对象,覆盖后对象变为普通对象,不可再进行追加上传。
- 第一次调用追加上传时,如果已存在同名的普通对象,则会抛出异常(HTTP状态码为409)。
- 追加上传返回的ETag是当次追加数据内容的ETag,不是完整对象的ETag。
- 单次追加上传的内容不能超过5GB,且最多支持10000次追加上传。
- 追加上传成功后,可通过
NSDictionary *temp = [response headers];NSString* nextPosition = [temp valueForKey:@"x-obs-next-append-position"]; 这种方式获取下次追加上传的位置;或者通过getObjectMetadata接口获取下次追加上传的位置。
父主题: 上传对象