简单上传
上传Object可以直接上传OSSData,或者通过NSURL上传一个文件:
- OSSPutObjectRequest * put = [OSSPutObjectRequest new];
- // 必填字段
- put.bucketName = @"<bucketName>";
- put.objectKey = @"<objectKey>";
- put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];
- // put.uploadingData = <NSData *>; // 直接上传NSData
- // 可选字段,可不设置
- put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
- // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度
- NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
- };
- // 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject
- // put.contentType = @"";
- // put.contentMd5 = @"";
- // put.contentEncoding = @"";
- // put.contentDisposition = @"";
- // put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil]; // 可以在上传时设置元信息或者其他HTTP头部
- OSSTask * putTask = [client putObject:put];
- [putTask continueWithBlock:^id(OSSTask *task) {
- if (!task.error) {
- NSLog(@"upload object success!");
- } else {
- NSLog(@"upload object failed, error: %@" , task.error);
- }
- return nil;
- }];
- // [putTask waitUntilFinished];
- // [put cancel];
上传到文件目录
OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储,但给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上来说是创建了一个名字以“/”结尾的文件,对于这个文件照样可以上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。
如,在上传文件是,如果把ObjectKey写为"folder/subfolder/file",即是模拟了把文件上传到folder/subfolder/下的file文件。注意,路径默认是”根目录”,不需要以’/‘开头。
上传时设置Content-Type和开启校验MD5
上传时可以显式指定ContentType,如果没有指定,SDK会根据文件名或者上传的ObjectKey自动判断。另外,上传Object时如果设置了Content-Md5,那么OSS会用之检查消息内容是否与发送时一致。SDK提供了方便的Base64和MD5计算方法。
- OSSPutObjectRequest * put = [OSSPutObjectRequest new];
- // 必填字段
- put.bucketName = @"<bucketName>";
- put.objectKey = @"<objectKey>";
- put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];
- // put.uploadingData = <NSData *>; // 直接上传NSData
- // 设置Content-Type,可选
- put.contentType = @"application/octet-stream";
- // 设置MD5校验,可选
- put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; // 如果是文件路径
- // put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>]; // 如果是二进制数据
- // 进度设置,可选
- put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
- // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度
- NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
- };
- OSSTask * putTask = [client putObject:put];
- [putTask continueWithBlock:^id(OSSTask *task) {
- if (!task.error) {
- NSLog(@"upload object success!");
- } else {
- NSLog(@"upload object failed, error: %@" , task.error);
- }
- return nil;
- }];
- // [putTask waitUntilFinished];
- // [put cancel];
追加上传
Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。
- OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];
- // 必填字段
- 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);
- };
- // 以下可选字段的含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/object&AppendObject
- // 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;
- }];