前奏
开始之前先说明一下这个是我开发结束一个月后写的,中可能有一些细节不是很到位请谅解,每一个成功背后都有很多的心酸。
iOS SDK下载连接 iOS SDK下载 https://cloud.tencent.com/document/product/436/6530
腾讯云注册账号给的ID提前准备工作
APP_ID=11$$$$4555;
SECRET_ID="DDGDD#####6A6qOl9Q***";
SECRET_KEY="UKGGssaaaaaaaaaaabx";
BUCKET="fks";
TENCENT_DOMAIN="http://fks-11$$$$4555.picdaash.myqcloud.com";
采用 使用Cocoapods导入手动导入没有尝试 pod"QCloudCOSV4"跟着文档走
1.根据文档的提示操作到【初始化】
下面说在你工程的配置参数
在需要使用的控制器中导入
创建
初始化APPId和bucket参数
对于其他参数
attrs 我这里是不没有设置、directory这个参数选填(如果你添加上返回的图片的URL就后面就会叠加一个Name这里就没有截图了时间长了不想再次截图)
insertOnly上传将插入并覆盖现有文件。但是如果设置“YES”,它不会覆盖上一个上传文件。
sign最重要的就是签名。下面介绍
2.签名获取
有两种方法获取签名 一种是自己生成 、一种是后台生成你去请求签名。
我生成似乎没有成功但代码还在
-(void)getUploadSign
{
NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
NSLog(@"时间%@",dat);
NSTimeInterval a=[dat timeIntervalSince1970];
NSString *timeString = [NSString stringWithFormat:@"%.0f", a];//转为字符型
NSLog(@"timeString%@",timeString);
//三个月后
NSTimeInterval b = [dat timeIntervalSince1970]+90*24*60*60*60;
NSString *timeString_3 = [NSString stringWithFormat:@"%.0f", b];//转为字符型
NSLog(@"timeString%@",timeString_3);
int x = arc4random() % 100000;
NSLog(@"随机数%d",x);
NSString *url = [NSString stringWithFormat:@"a=%@&b=%@&k=UKGGssaaaaaaaaaaabx&e=%@&t=%@&r=%d&u=0",appId,bucket,timeString_3,timeString,x];
NSLog(@"%@",url);
//加密
//self.sign = [LDUserViewController Base_HmacSha1:@"UKGGssaaaaaaaaaaabx" data:url];
//self.sign =url;
NSLog(@"最后签名%@",self.sign);
//[self.client getSignWithUrl:url callBack:@selector(getSignFinis:)];
}
#pragma mark - network
-(void)getSignFinis:(NSString *)string
{
if (string) {
self.sign = string;
NSLog(@"demo self.sign = %@",self.sign);
//imgUrl.text =self.sign;
}else{
UIAlertView *al = [[UIAlertView alloc] initWithTitle:@"警告" message:@"签名为空" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[al show];
//
}
}
2.1 后台请求
自己掉接口
3上传图片
3.1用户选取图片之后,将选取的图片重新命名保存到本地
我这里给图片命名就是UUID.jpg
3.2到这里 你的签名有了 、图片路径有了、参数都配置了开始 用路径上传文件多个部分
//用路径上传文件多个部分
-(void)uploadFileMultipartWithPath:(NSString *)path
{
// fileName = [NSString stringWithFormat:@"a%lld",fileName];
// COSObjectMultipartPutTask *task = [[COSObjectMultipartPutTask alloc] init];
COSObjectPutTask *task = [[COSObjectPutTask alloc] init];
NSLog(@"-send---taskId---%lld",task.taskId);
//task.multipartUpload = YES;
currentTaskid = task.taskId;
//NSLog(@"path%@",path);
task.filePath = path;
task.fileName = [NSString stringWithFormat:@"%@.jpg",uuid_LD];;
task.bucket = bucket;
//task.attrs = @"customAttribute";
//task.directory = [NSString stringWithFormat:@"/%@",task.fileName];//这个参数选填
//NSLog(@"task.directory = %@",task.directory);
task.insertOnly = NO;//上载将插入并覆盖现有文件。但是如果设置“yes”,它不会覆盖上一个上传文件。
task.sign = _sign;
COSClient *client= [[COSClient alloc] initWithAppId:appId withRegion:@"sh"];
client.completionHandler = ^(COSTaskRsp *resp, NSDictionary *context){
COSObjectUploadTaskRsp *rsp = (COSObjectUploadTaskRsp *)resp;
if (rsp.retCode == 0) {
//sucess
NSLog(@"成功后,后台返回文件数据%@\n任务描述信息%@\ndata%@\nrsp.sourceURL%@",rsp.fileData,rsp.descMsg,rsp.data,rsp.sourceURL);
//如果返回的是图片URL不为空说明上传成功了
//判断
if ([self isBlankString:rsp.sourceURL]) {
[LCProgressHUD showFailure:@"上传失败重新上传!"];
}else{
//不为空上传成功
//给服务器传图片URL
[self UploadingURLToTheServerNstringURL:rsp.sourceURL];
}
}else{
NSLog(@"xx ");
NSLog(@"context = %@COSTaskRsp *resp=%@",context,rsp.descMsg);
[LCProgressHUD showFailure:@"上传失败重新上传!"];
}
};
client.progressHandler = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) {
//progress上传进度
//NSLog(@"执行了");
};
[client putObject:task];
}
当返回rsp.retCode == 0时就说明上传成功了 rsp.sourceURL就是你要的图片的URL可以打印一下自己看看
基本上就这样时间长了不是很详细,只能做参考,欢迎修正。