美文网首页iOS tipsiOS 技术文档收录外包参考资料
iOS上传图片文件到七牛遇到的那些坑

iOS上传图片文件到七牛遇到的那些坑

作者: voidxin | 来源:发表于2016-03-12 23:35 被阅读4685次

  最近公司的项目涉及到图片的保存,基于大量图片放在本地服务器会给公司增加不小的压力,所以选择了云存储,对比之后选择了七牛。

  七牛的官方文档实在是太过于简单,下载SDK之后,根据官方 给的Demo,成功上传了图片。只是token的生成过程有些波折。

由于七牛官方不提倡在客户端生成Token,所以没有给出相应的iOS端生成Token的代码。多方查找资料之后自己写了一个本地生成Token的方法如下:



有了token之后就引入SDK,如下操作即可实现上传:

一开始很纳闷,从放回信息中没有找到我们上传成功之后需要的图片的外链接地址,查阅官方文档之后才明白外链接地址需要我们自己拼接。首先,成功之后返回的resp是:

resp {

              hash = "FhweZwfJipE4P0K6Mm_QbC6P0dxW";

              key = zx12;

}

如果失败resp为nil,所以图片的外链接地址就是你的 域名/key(返回的key)

相关文章

网友评论

  • Ego_1973:您好,根据您的demo,我在上传时返回<QNResponseInfo= id: B7B9A119-B9DA-4965-9072-FD6F652A9608, ver: 7.1.8, status: 401, requestId: 2F8AACiUL1mfxfQU, xlog: body;UP/401, xvia: (null), host: upload.qiniup.com ip: (null) duration: 0.171154 s time: 1510049063 error: Error Domain=qiniu.com Code=401 "(null)" UserInfo={error=bad token}>
    这时为啥呢
  • 两朵云:我上传图片也报错了求解决
    2017-02-17 12:56:18.012 PskgCommercialCity[5096:145930] 失败
    2017-02-17 12:56:19.796 PskgCommercialCity[5096:145930] info ===== <QNResponseInfo= id: 557CF907-3307-447C-BB48-BDF7E349BBEE, ver: 7.1.5, status: 400, requestId: cAYAAIu2j2gD-qMU, cAYAAIu2j2gD-qMU, xlog: body;UP:1/400;UP:3/400, xvia: (null), host: upload.qiniu.com ip: 115.231.183.168 duration: 0.266951 s time: 1487307194 error: Error Domain=qiniu.com Code=400 "(null)" UserInfo={error=incorrect region, please use up-z2.qiniu.com}>
  • 1dedce7d2707:大神 我的返回UserInfo={NSUnderlyingError=0x608000245b80 {Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x600000227a80> { URL: http://www.qiniu.com/v1/ip } { status code: 404, headers {
    Connection = "keep-alive";
    "Content-Length" = 57;
    "Content-Type" = "text/html";
    Date = "Thu, 24 Nov 2016 02:28:36 GMT";
    Server = "NWS_TCloud_S1";
    "X-Cache-Lookup" = "Hit From 404 Cache";
    } }, NSErrorFailingURLKey=http://www.qiniu.com/v1/ip, com.alamofire.serialization.response.error.data=<54686520 72657175 65737465 64205552 4c20272f 76312f69 70272077 6173206e 6f742066 6f756e64 206f6e20 74686973 20736572 7665722e 0a>, NSLocalizedDescription=Request failed: unacceptable content-type: text/html}}, 怎么解决哦
    两朵云:我上传图片也报错了求解决
    2017-02-17 12:56:18.012 PskgCommercialCity[5096:145930] 失败
    2017-02-17 12:56:19.796 PskgCommercialCity[5096:145930] info ===== <QNResponseInfo= id: 557CF907-3307-447C-BB48-BDF7E349BBEE, ver: 7.1.5, status: 400, requestId: cAYAAIu2j2gD-qMU, cAYAAIu2j2gD-qMU, xlog: body;UP:1/400;UP:3/400, xvia: (null), host: upload.qiniu.com ip: 115.231.183.168 duration: 0.266951 s time: 1487307194 error: Error Domain=qiniu.com Code=400 "(null)" UserInfo={error=incorrect region, please use up-z2.qiniu.com}>
    1dedce7d2707:@voidxin 哥哥 我可以加你的QQ吗 我想问你点问题 如果你不方便那你加我QQ 964692802 我想解决一下上传图片的问题
    voidxin:@小小孩Sexy 你上传的是图片还是文件呢?
  • 蚯小麦:大神您好 我上传报错 UserInfo={error=key doesn't match with scope} 这个key是后台设置 还是我们前台设置啊
    蚯小麦:但是我不管怎么设置都报这个错,传空就可以,但是图片名不能是空啊,作急啊
    voidxin:@蚯小麦 key就是你上传时给的图片名称啊,前端设置
  • 4cc8d206354d:也不知道你能不能看到 我抱着试一试的态度问一下 我第一次用七牛 官网真的看不懂 求教 534955398 我的企鹅
    voidxin:@4cc8d206354d 自己先看文档哈
  • 等今天:大神 我这报错,这是什么意思啊
    info <QNResponseInfo= id: 2B473295-2AB0-4F9E-B914-100E7E259297, ver: 7.0.16, status: 401, requestId: dAsAANOr0IwrMX8U, dAsAANOr0IwrMX8U, xlog: body;UP/401;UP:5/401, xvia: 1.1 shuangxian144:4 (Cdn Cache Server V2.0), 1.1 fwt16:2 (Cdn Cache Server V2.0), host: upload.qiniu.com ip: 60.10.3.48 duration: 12.191737 s time: 1476953264 error: Error Domain=qiniu.com Code=401 "(null)" UserInfo={error=bad token}>
    我是从服务器接token但是一直上传不上去才想自己生成token试一下的 但是也失败
    用服务器的token一直报错400
  • 7274673422ab:大神 这个域名在哪个地方可以找到
    info ===== <QNResponseInfo= id: FCCE6BEE-F90B-4AB1-A4F8-3A0BC79D0E6B, ver: 7.1.1, status: 200, requestId: uSQAAAus8tIzUH4U, uSQAAAus8tIzUH4U, xlog: s.ph;s.put.tw:25;s.put.tr:609;s.put.tw:26;s.put.tr:390;s.ph;PFDS:428;PFDS:649;rdb.g/no such key;DBD/404;v4.exist/Document not found;rs24_12.ins;qtbl.ins:1;mc.s;RS:2;rs.put:7;rs-upload.putFile:658;UP:862;UP:880, xvia: (null), host: upload.qiniu.com ip: 115.231.97.59 duration: 33.580155 s time: 1476705912 error: (null)>
    2016-10-17 20:05:12.190 A[16195:397226] info ===== (null)
    2016-10-17 20:05:12.190 A[16195:397226] resp ===== {
    hash = "ltfve-9rIKBcMpS_W81XJ0c-p5HU";
    key = "ltfve-9rIKBcMpS_W81XJ0c-p5HU";
    }我这个上传成功啦 但是怎样才能得到我上传图片的链接地址??
    7274673422ab:@voidxin OK谢谢了!
    voidxin:@冯闯 “加载” == “加上"(笔误)
    voidxin:@冯闯 在七牛内容管理中有个外链默认域名,http://外链默认域名再加载你上传成功后的key,就是图片的外链地址了。其实你在七牛上内容管理中也可以看到图片外链地址
  • 2c359b06fc27:拼接图片的URL时 后缀 .jpg 也是自己手动拼接上去的???
  • 2c359b06fc27:返回的 hash = "FhweZwfJipE4P0K6Mm_QbC6P0dxW"; 有什么用
    2c359b06fc27:@voidxin 好的
    voidxin:@smart笨小孩 目前我没用到
  • afa38ae8399f:能问下那个key是什么吗?
    voidxin:@smart笨小孩 对的,要取一个唯一标识,时分秒再加个随机数,这样可保证唯一性
    2c359b06fc27:@voidxin 如果app有一万人上传了图片如果只是简单的拼一个简单的.....@"zxin%ld",i......会出问题???一定要取一个唯一标识符对吧??
    voidxin:@旺仔QQ糖 你命名的图片的名称
  • Twenty_:你好我最近也在做这个七牛上传问题,我想问下为什么你不经过服务器,自己上传文件呢。。如果你自己上传的话,你怎么获取你上传的资源的。
    Twenty_:@voidxin 哦 哦 我理解错啦。。你觉得 我们把QNUploadManager 设置成单例是不是好那么一点。。因为我还没开始正式开发。。
    voidxin:@二零壹四年的天空有星星 这只是一个demo,在我的实际项目中生成token这个步骤是交给我们的服务器去做的。获取文件的路径就是你七牛的域名后面拼接上你上传文件的文件名。就是你访问文件的地址。
  • 含泪若笑:你好 我仿照你 demo去上传图片时,[upManager putData:data key:[NSString stringWithFormat:@"zxin%ld",i] token:token complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
    NSLog(@"info %@",info);
    NSLog(@"resp %@",resp);
    if (resp!=nil) {
    [urlArry addObject:[resp objectForKey:@"key"]];
    }
    这里会直接跳过,就是上传失败吧,还是resp为空是上传失败,但我这里都不会执行 为什么啊,求解答
  • a6ddb149eed6:哥们 我想知道上传成功后怎样拼接url, 按照你的说法我拼成的为 http://7xl70k.com2.z0.glb.qiniucdn.com/1465097003621.png 但是网页返回为 {"error":"download token not specified"} 为何
    voidxin:@ln371494114 其实就是你的域名加上你的图片名称,首先你得确保图片已上传成功,返回正确
  • 酸三角:哥们有demo? 我也是在官网上看文档,看不懂
    voidxin:@酸三角 不好意思现在才看到评论,你可以看看我当时写的demo,https://github.com/voidxin/UploadImageToQiniu,希望可以帮到你

本文标题:iOS上传图片文件到七牛遇到的那些坑

本文链接:https://www.haomeiwen.com/subject/nnwxlttx.html