在使用七牛进行网络资源转存时会出现读取超时(30s)的问题,如以下报错:
1 |
_ResponseInfo__response:None, exception:HTTPConnectionPool(host='iovip.qbox.me', port=80): Read timed out. (read timeout=30), status_code:-1, text_body:None, req_id:None, x_log:None, error:HTTPConnectionPool(host='iovip.qbox.me', port=80): Read timed out. (read timeout=30) |
据了解默认使用的同步的方式(Java 和 Python),要实现需修改默认值:
另外还一种异步的方式:https://developer.qiniu.com/kodo/api/4097/asynch-fetch
但参照文件档使用的过程中发现还是有坑的,Authorization使用QBox会报:
1 |
{'error': 'only allow qiniu auth'} |
而改成 Qiniu 还是会报
1 |
{"error": "bad token"} |
最终联系客户得到的方案是:
Java 可参见 Demo
或者直接调这两行代码
1 2 |
BucketManager bucketManager = new BucketManager(Auth.create(accessId, secretKey), new configuration()); bucketManager.asynFetch(url, bucket, key, md5, etag, callbackUrl, callbackBody, callbackBodyType,callbackHost, fileType) |
Python 的Demo代码实际并不能跑通,可参考以下示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import requests,json from qiniu import QiniuMacAuth # 需要填写你的 Access Key 和 Secret Key等信息 access_key = '' secret_key = '' bucket_name = '' fetch_url = '' url = "http://api-z0.qiniu.com/sisyphus/fetch" body = { "url": fetch_url, "bucket":bucket_name, } q = QiniuMacAuth(access_key, secret_key) token = q.token_of_request('POST', 'api-z0.qiniu.com', url, content_type='application/json', body=json.dumps(body), qheaders='') header = { "Authorization": "Qiniu %s" % token, "Content-Type": "application/json" } print(header) req = requests.post(url, json=body, headers=header) print (req.json(),req.headers) |
七牛的小工具
图片信息查看:xxx.com/xxx?imageInfo
视频信息查看:xxx.com/xxx?avinfo
出海问题
受限于七牛海外节点略有不足的问题(对方已在改善,但实际测试尚未达到预期),欧洲等多地反映无法上传视频,因此我司对于海外用户采取使用 Ali OSS上传再转存的方案。
为什么不直接用 OSS 呢?SDK 方面还是有些欠缺,同时需要考虑迁移成本,小公司折腾不起。
以下就是阿里 OSS 中的坑:
视频截帧仅支持编码格式为H264格式的视频文件,所以如果有同学使用中发现图片不显示,可能不是参数的问题,而是和视频编码有关,这一点七牛的支持还是比较好的。
多啰嗦一句,其实都知道阿里对七牛有投资关系,并且七牛所推云主机实际背后使用的就是阿里云的机器,对外海外市场较重的AWS 可能是更好的选择。
七牛管道/队列设置:https://portal.qiniu.com/dora/media-gate/pipeline