2020-12-31 09:49:42 阅读(161)
599错误处理如果htp状态码在与七牛的互动中出现599错误,一句话,不要犹豫,直接联系七牛的技术支持。七牛的文件也在很多地方提到了这个错误,指导大家联系技术支持。作者是在分块上传mkfile调用后出现的,联系技术支持后,说是调整了一下,让我重试。后来就好了...分块上传无法从回调中获得文件的原始名称简单上传为multipart/form-通过data上传,七牛服务器可以从请求中获得文件的原始名称,并支持使用魔法变量$(fname)回调业务服务器。然而,当使用分片上传时,情况会有所不同。分片上传需要在最后调用mkfile拼接分片。然而,mkfile接口支持普通请求,没有附带文件名,因此七牛无法获得文件名。此时,从$(fname)中间拿不到文件名。我还向七牛技术支持提交了这个问题。结果是使用自定义变量mkfile支持将自定义变量放入url中,并在回调时将自定义变量传输给业务服务器。谨慎使用图片预处理七牛云支持许多文件预处理,其中最常用的应该是图片预处理,可以改变图片的大小等。七牛建议通过GET直接指定图片处理结果的url,如下:http://qiniuphotos.qiniudn.com/gogopher.jpg?imageview2/1/1w/200/h/200处理后的图像将自动缓存,用户不必在意,只要每次访问都使用此URL即可。然而,一开始,为了保持与其他文件形式统一的处理方法,作者使用了图片预处理(因为视频只能预处理),即在标签中指定了预处理。这时,问题出现了。从后台的日志可以看出,图片的预处理通知回调比正常上传的成功回调要快!在预处理结果到来之前,我的业务服务器数据库中没有这样的图片,预处理结果无法保存。因此,建议使用url直接处理。图片应谨慎使用。预处理视频文件不能快速播放。通常,用户在观看视频时会根据自己的喜好快速将视频定位到指定时间。要实现这一功能,视频本身需要关键帧信息,服务端需要支持关键帧播放请求。但笔者发现,使用七牛云转换后的视频是无效的。因此,通过咨询技术支持,答案是转换文件具有关键帧,但七牛使用CDN加速,因此关键帧需要CDN的支持。如果您想使用此功能,您需要单独联系销售或技术支持在CDN上配置,这需要很长时间。作者联系了销售和技术支持,说是为了帮助我配置,但到目前为止还没有完成,因为最近这并不是特别重要,所以没有跟进。Callback校准是可选步骤。由于七牛云在上传完成后会回调业务服务器,因此理论上,业务服务器需要验证此回调的合理性。七牛文档中有一些原理,需要HMAC-SHA1签名函数。然而,七牛的SDK没有提供直接的验证方法。在研究文档、多次失败和查看SDK源代码后,作者终于成功验证了它。关键区别在于文档中的这句话:获取明文:data=Request.URL.Path ”\n” Request.Body这里的Requesttt.URL.Path是否包含Querystring?答案是包含的!以下是作者C#服务端的验证代码,使用ASP.NETWebApi:C#Code复制内容到剪贴板byte[] key = System.Text.Encoding.UTF8.GetBytes(Qiniu.Conf.Config.SECRET_KEY); using (HMACSHA1 hmac = new HMACSHA1(key)) { var t = filterContext.Request.Content.ReadAsStringAsync(); t.Wait(); string rawbody = t.Result; log.DebugFormat("request's rawbody : {0}", rawbody); string text = filterContext.Request.RequestUri.PathAndQuery "\n" rawbody; log.DebugFormat("PathAndQuery \\n rawbody : {0}", text); byte[] digest = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(text)); string computed = Qiniu.Util.Base64URLafe.Encode(digest); log.DebugFormat("Computed hash after base64 : {0}", computed); IEnumerable<string> auths; if (filterContext.Request.Headers.TryGetValues("Authorization", out auths) && auths.Count() == 1) { string auth = auths.First(); log.DebugFormat("Authorization in header : {0}", auth); if (auth.StartsWith("QBox ")) { var arr = auth.Substring(5).Split(':'); if (arr.Length == 2) { if (arr[1] != computed) { log.ErrorFormat("Authorization failed. Since auth from header {0} not equals computed {1}", arr[1], computed); } else { log.Debug("Authorization success."); //only pass can be return return; }
以上就是关于解决方案:七牛云存储使用中一些常见问题的相关介绍,更多解决方案:七牛云存储使用中一些常见问题相关内容可以咨询我们或者浏览页面上的推荐内容。我们将让你对解决方案:七牛云存储使用中一些常见问题有更深的了解和认识。
推荐阅读
最新文章
猜你喜欢以下内容:
一 客户顾问-张三 一