iOS中使用七牛云存储Django服务端实现简单的图片上传功能
来源:互联网 发布:程序员试用期总结 编辑:程序博客网 时间:2024/06/14 01:43
这篇文章主要以一个例子来讲解OC七牛云存储的图片上传实现,服务端为Django
一、服务端代码
#全局变量,AccessKey和SecretKey在七牛的官网注册之后可以分配到QINIU_ACCESS_KEY = '***********'QINIU_SECRET_KEY = '******'QINIU_BUCKET_NAME = '*****'#全局变量,只创建一个认证过的qiniu对象q = qiniu.Auth(QINIU_ACCESS_KEY, QINIU_SECRET_KEY)#以json格式返回upload token的视图def getToken(request): #上传文件的名称key fileKey = '' #随机生成一个16位的大写字母串作为名称 for i in range(0, 16): fileKey += chr(randint(65, 90)) #获取当前时间 nowTime = datetime.datetime.now() #根据时间和随机字符串构造key,根据时间分割出一个伪层级结构,可根据需求自行定义 fileKey = str(nowTime.year) + '/' + str(nowTime.month) + '/' + str(nowTime.day) \ + '/' + str(nowTime.hour) + '/' + str(nowTime.minute) + '/' + str(nowTime.second) + '/' + str(nowTime.microsecond) \ + '/' + fileKey #上传文件成功后返回给客户端的信息,注意此处写法,要求是双引号否则会出错 returnBody = '{\"key\": $(key),' \ '\"bucket\": $(bucket),' \ '\"size\": $(fsize),' \ '\"w\": $(imageInfo.width),' \ '\"h\": $(imageInfo.height),' \ '\"uuid\": $(uuid)}' #构造一个put policy,具体用法详见官方文档 putPolicy = { 'returnBody': returnBody, } #获取一个上传凭证 global q token = q.upload_token(QINIU_BUCKET_NAME, fileKey, policy=putPolicy) #封装成json类型发送信息 tokenJson = { 'token': token, 'key': fileKey, } return HttpResponse(json.dumps(tokenJson), content_type='application/json')
服务端代码较为简单,主要是看用户自定义的程度如何,在此我只是简单的示范了一下用法,服务端应该将最后生成的key和七牛为你分配的域名组合起来并保存在数据库中,这样服务端下一次可直接返回url给客户端进行数据访问。
二、客户端(iOS端)
1、获取token:由于iOS进行异步加载,upload token可能还没获得的时候便执行了上传工作,此时必然会发生错误,因此在这里采用同步获取数据的方式,确保客户端先获取到服务端返回的upload token再进行上传工作。
- (NSDictionary*) getToken { //封装一个获取upload token的url NSURL *url = [NSURL URLWithString:@"http://127.0.0.1:8000/gettoken/"]; //创建一个url request NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:url]; //设置http访问方式为GET方式 urlRequest.HTTPMethod = @"GET"; //使用AFNetworking进行同步操作 AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; //开始执行同步访问方式 [operation start]; [operation waitUntilFinished]; //由于在服务端返回的json数据,因此需要先进行一次转换,使用Foundation框架即可 NSDictionary *result = (NSDictionary*)[NSJSONSerialization JSONObjectWithData:operation.responseData options:0 error:nil]; //返回封装了upload token的字典 return result;}- (void)click:(UIButton*)sender { //在这里我将qiniu的manager放在AppDelegate文件中以构造一个全局量,只生成一个即可 AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; QNUploadManager *qiniuManager = delegate.qiniuUploadManager; //使用同步方式获取upload token NSDictionary *tkDict = [self getToken]; //加载本地的一张图片并封装为NSData NSString *filePath = [[NSBundle mainBundle] pathForResource:@"under30" ofType:@"jpg"]; NSData *data = [NSData dataWithContentsOfFile:filePath]; //调用QNUploadManager进行上传操作,在服务端设置的returnBody既为这里的resp //这里的key为文件名,token即为上传凭证 [qiniuManager putData:data key:[tkDict valueForKey:@"key"] token:[tkDict valueForKey:@"token"] complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) { NSLog(@"-------------------------"); NSLog(@"TOKEN %@", [tkDict valueForKey:@"token"] ); NSLog(@"FILEKEY %@", [tkDict valueForKey:@"key"]); NSLog(@"QNRESPONSE INFO %@", info); NSLog(@"STRINGKEY KEY %@", key); NSLog(@"RESPDICT DICT %@", resp); NSLog(@"-------------------------"); } option:nil]; /** 这个urlStr即为刚刚上传的图片的外网链接,com以后即为我们自己组装的文件名key,封装为一个NSURL以便读取数据 七牛提供了一些基本和扩展的图片处理方法,直接在url后添加数据即可,非常的便捷,在这里不做过多解释,可移步官方文档 **/ NSString *urlStr = @"http://7xku6x.com1.z0.glb.clouddn.com/2015/8/3/11/22/56/165133/ADGVHMOEYADDWAAQ"; NSURL *url = [NSURL URLWithString:urlStr]; //通过前述的NSURL来加载这张图片 UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url options:1 error:nil]];}
0 0
- iOS中使用七牛云存储Django服务端实现简单的图片上传功能
- django中实现图片的上传功能
- django中实现图片上传
- VS2010中使用NeatUpload实现简单的文件上传功能
- Django实现图片的上传
- laravel5中使用七牛云存储、上传图片
- Django中实现文件上传功能
- php中图片上传的简单实现
- 简单的图片上传功能
- 用jsp实现简单的图片上传功能
- 用jsp实现简单的图片上传功能
- Flex中使用RemoteObject实现图片上传功能
- Flex中使用RemoteObject实现图片上传功能
- Laravel5.2中使用xheditor编辑器实现上传图片功能
- 实现上传图片的功能
- 图片上传功能的实现
- django下ckeditor上传图片的实现
- 在asp.Net中使用fileuplod控件实现上传图片的功能
- JavaScript向php传递参数
- 那些年,在nodejs上踩过的坑(一)
- Linux中替换文本中的字符串
- 439 - Knight Moves
- HDU 5298 Solid Geometry Homework(异或)
- iOS中使用七牛云存储Django服务端实现简单的图片上传功能
- java.sql.SQLException: Parameter metadata not available for the given statement
- C语言-变量的存储类别(auto, static, register, extern)
- Store Kit Guide(In App Purchase)翻译
- 暑假集训第四周阶段一 DP A - Robberies
- opencv——PNG格式图像读取转换函数
- C++第七节:继承
- 斐波那契数列四吧
- Codeforces 520D. Cubes 状态模拟+贪心