- 導入SDK,這部分就不介紹了
- 這里只介紹如果上傳圖片
阿里云的官方文檔講解的比較詳細,但是坑爹的是少了行代碼,所以找不到錯誤就很難受了
//將image轉(zhuǎn)成Data
NSData *data = UIImageJPEGRepresentation(image, 0);
NSString *endpoint = model.point;//后臺傳回來的
//AccessKeyId --- secretKeyId 都是后臺返回的 securityToken填空字符串就好了
id<OSSCredentialProvider> credential = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:model.AccessKeyId secretKeyId:model.AccessKeySecret securityToken:@""];
OSSClient*client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential];
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
put.bucketName = model.ducketName;//后臺返回的
//根據(jù)用戶ID和時間戳來生成一段字符串 來保證圖片的唯一性
NSString *timestr = [NSString stringWithFormat:@"%@%@",[UserDefaultTool userId],[self obtainNowTimeStr]];
//將后臺返回的uploadFilePath和上面的字符串拼接在一起
put.objectKey = [NSString stringWithFormat:@"%@%@.jpg",model.uploadFilePath,timestr];
put.uploadingData = data; // 直接上傳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) {
//缺少的就是這一步 里面的參數(shù)和上面一樣
task = [client presignPublicURLWithBucketName:model.ducketName
withObjectKey:[NSString stringWithFormat:@"%@%@.jpg",model.uploadFilePath,timestr]];
if (!task.error) {
//上傳成功了,把圖片URL地址傳出去 task.result就是圖片URL 傳給自己服務(wù)器就好了
if (updataBackResult) {
updataBackResult(task.result);
}
} else {
NSLog(@"upload object failed, error: %@" , task.error);
}
return nil;
}];