Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >上传图片失败问题的排查记录

上传图片失败问题的排查记录

原创
作者头像
莫空9081
修改于 2021-11-23 03:23:21
修改于 2021-11-23 03:23:21
2.2K0
举报
文章被收录于专栏:iOS 备忘录iOS 备忘录

背景

最近开发水印相机,遇到了个难缠的问题。这里记录分享一下。

之前上传图片功能的开发,一般都是修改用户头像之类的,所以印象中上传图片,没有什么难处理的,使用 AFNetworking的 formData 进行上传,直接就可以了。但是这次用户大批量使用水印相机后大量反馈上传慢、上传不成功的问题。

排查

用户反馈有问题后,开始排查;在用户反馈上传不成功的同一时间,在开发环境和线上环境尝试拍摄上传均可正常上传。

初步判断是网络问题,由于用户需要在工地现场使用此功能,所以猜测是用户网络环境的问题。建议用户尝试切换网络重新上传。同时让用户使用 SpeedTest.cn测速,发现部分用户月底流量限速网速被限制了,上传网速很低,导致上传不成功。

然而还是有部分用户,测速显示上传速度28M/s,但是上传依旧超时失败。继续排查后,有同事在测试环境出现了一直上传失败的情况,排查后发现安全组有策略:同一IP单位时间访问请求的数量超出几千次后,当前 IP 会被限制,任何操作都会限制。但是进一步排查后,发现线上因为这个原因被限制的用户并没有太多。

继续排查后,发现有用户反馈提示上传超时,但是实际上传成功。查看后发现,当网速不好时,客户端设置超时时间6秒,但是服务端的超时是12秒,所以当上传时间超出6秒时,客户端AFNetworking请求因超时,返回上传失败,但实际上传服务端成功的情况。针对这种情况,修改客户端超时时间大于等于服务端超时,即,上传超时的判断由服务端来判断而不是客户端。

过程中还发现用户反馈,选择多张上传失败,单张上传能成功的情况。这种情况排查后发现,同样是网络不好的情况下,超时时间已修改为15秒,3G 网络,选择多张时上传失败,单张则可以上传成功。排查后发现是并发请求的问题。(最开始的多张照片是打包上传,即多张照片,在 AFN 的FormData中添加组合,然后使用一个请求发出,后来发现有上传失败后,服务端说照片的打包上传并没有意义,因为压缩不了大小,让客户端修改为一张一个请求)于是选择多张上传时,是每张照片一个请求,使用 DispatchGroup判断是否所有请求是否成功,相当于假设拍摄了9张照片,点击上传,是同时发起了9个上传请求,然后等待9个请求的结果,这对于上传网速不太好的用户,很大的概率出现上传失败。分析原因是,假设上传网速有50K,这50K 如果都用来上传同一张照片,可能15秒内上传成功;但是如果用来同时上传9张,则一张也成功不了。这也是网盘类 APP上传每次同时只有两三个任务开启的原因。针对这种情况,修改上传为NSOperationQueue队列上传,设置队列最大并发数为2。

用户反馈上传失败问题时,服务端那边却看不到超时或者失败,甚至请求的日志也看不到。联系网络组协助排查后发现,有 token 过期网关拦截的日志,项目中的 token 有效期为7天,刷新 token 的逻辑与主工程的 Controller 绑定,而上传照片的项目是 CocoaPods 方式添加到项目中的,所以 token 过期后触发网络请求基类的通知,但是主工程的 Controller接受到后,判断当前页面没有显示就没有处理。针对这种情况,把 token 过期刷新逻辑从和 Controller 的绑定中抽出到单独的处理类,确保项目中任何地方的 token 过期都能够触发刷新处理逻辑。

同时,从听云后台看到,针对上传接口失败的日志,有些请求中的 localDNS 为空,针对这种没有 localDNS 的情况,项目添加阿里的 HTTPDNS,每次上传前,获取上传域名接口的 IP,然后替换请求链接中的域名,设置域名到 Host,再发起请求。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从皮肤同步失败的问题来看输入法服务端和客户端的交互
小编一直从事客户端测试工作,之前偶然一次因为服务器要迁移,服务端这边需要我们进行功能回归,所以小编针对客户端同步相关的功能进行相关测试,其中有个问题牵扯了很久,遂决定记录下来分享一下。
用户5521279
2020/08/05
1.2K0
从皮肤同步失败的问题来看输入法服务端和客户端的交互
基于端智能的播放QoE优化
 点击上方“LiveVideoStack”关注我们 ▲扫描图中二维码或点击阅读原文▲ 了解音视频技术大会更多信息   //   编者按:伴随着B站业务形式的不断扩展,不同场景对视频播放体验的稳定性、流畅性提出了更高的要求,为保障提供给用户更好的播放体验B站做出了哪些努力?LiveVideoStackCon2022上海站大会我们邀请到了哔哩哔哩 , 资深开发工程师陆元亘老师为我们详细介绍B站在点播QoE优化上的经验与成果。 文/陆元亘 整理/LiveVideoStack 非常荣幸能够参加LiveVideoS
LiveVideoStack
2023/04/04
6430
基于端智能的播放QoE优化
新时代运维监控能力的进化——天网云用户体验监控平台实践
本文介绍了互联网监控平台在腾讯社交网络事业群中的应用,通过监控平台实现实时监控、流量分析、异常事件预警等功能,并应用机器学习技术,实现自动化运营闭环,提高运维效率,保障业务质量。同时,该平台还支持多种接入方式,满足业务不同场景的监控需求,可广泛应用于互联网、移动互联网、工业互联网等领域。
织云平台团队
2017/01/05
4.9K0
新时代运维监控能力的进化——天网云用户体验监控平台实践
大文件上传原理及实现方案
在网络应用中,大文件上传是一个技术挑战。本文详细解析了大文件上传的核心原理,并探讨了多种实现方案。从基本的文件分割、断点续传到复杂的并行上传,文章涵盖了一系列技术细节和最佳实践,包括如何处理网络波动、提高数据传输效率等关键问题。此外,还介绍了相关的前端和后端技术支持。无论是开发者还是架构师,这篇文章都将提供有力的技术指导和实战参考,帮助读者高效解决大文件上传问题。
京东技术
2024/02/27
2.8K0
大文件上传原理及实现方案
Spring Boot 如何上传大文件?骚操作~
最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。
架构师修炼
2020/12/16
2.4K0
Spring Boot 如何上传大文件?骚操作~
线上故障处理实践
最近公司一个系统发生线上故障,系统架构为C/S的,客户端是APP;系统的功能有:联系人、短信、通话记录等,每个业务都有备份、恢复的功能,即用户可以在APP内备份自己的联系人、短信、通话记录至服务端,然后可以后续某个时间段恢复数据。
心平气和
2020/09/11
6170
线上故障处理实践
记录一次访问量瞬间增加,导致请求卡住的问题排查过程
2022.11.07号下班路上突然收到许多用户反馈,说小程序进不去了。然后自己试了一下,打开一直转圈,于是快马加鞭赶回家,打开了电脑。
房东的狗丶
2023/02/17
7560
人机交互,6种最被BAT认可的加载模式
作为用户体验设计师,不管是产品、交互还是UI,都习惯于站在人机交互的角度去思考产品设计问题,在这个过程中我们往往会忽略了一个重要的过程:数据传输。先看下面这张图。 用户、客户端、服务器 用户与客户端进
BestSDK
2018/02/28
1.6K0
人机交互,6种最被BAT认可的加载模式
Flutter中的相机拍照、相册选择图片、上传图片到服务器
需要注意的是,image_picker这个第三方组件只能是单选图片,如果大家有多选图片的需要,可以自己去pub.dev上面去搜索,本文只是针对“选择图片并上传”这一功能点做思路的介绍,所以对于各种第三方,都不会很详细地去讲怎么用。
拉维
2019/09/10
21.3K3
Flutter中的相机拍照、相册选择图片、上传图片到服务器
搭建cloud框架中遇到的问题(记录篇)
       当我在测试配置网关转发时,发现另一模块根据令牌来云平台取数据的时候,通过实际地址令牌有效,通过网关转发获取不到数据。
余生大大
2022/11/02
2500
搭建cloud框架中遇到的问题(记录篇)
聊一聊测试过程中接口不通的原因排查
在我们进行接口测试时,大概率会遇到接口调不通的情况,如何排查接口不通,作为测试从业者应该考虑的问题。
漫谈测试
2025/03/13
1630
聊一聊测试过程中接口不通的原因排查
海量之道系列文章之弱联网优化 (五)
樊华恒
2017/07/06
3.2K0
海量之道系列文章之弱联网优化 (五)
微服务架构下请求调用失败了怎么办!
微服务架构相比单体架构,服务的调用从同一台机器内部的本地调用变成了不同机器之间的远程方法调用,但是这个过程也引入了两个不确定的因素:
JavaEdge
2021/02/23
1.1K0
微服务架构下请求调用失败了怎么办!
移动端常见白屏问题优化之网络优化篇
图片加载作为重中之重的App体验指标,端侧的白屏问题则是其中最为严重、也是最为常见的问题之一。想象一下如果你在浏览交易商品、社区帖子等核心场景下,图片无法完成加载是多么糟糕的体验。
JackJiang
2024/09/12
2260
移动端常见白屏问题优化之网络优化篇
Nginx神奇的499竟然不在HTTP响应码标准内?快来了解一下!
Nginx的访问日志中,存在499状态码的日志。但常见4xx状态码只有400、401、403、404等,499并未在HTTP RFC文档。这499错误日志,在流量较大场景下,特别是面向Internet的Web站点场景下还是很常见 。
JavaEdge
2023/09/15
1.5K0
Nginx神奇的499竟然不在HTTP响应码标准内?快来了解一下!
Typora自动上传图片至smms图床
前段时间听说 typora 新版本内置了 PicGo 工具,可以直接上传图片到图床了,这可真是太方便了,之前我写博客就用的是 PicGo 工具,也挺方便的,粘贴图片路径就直接返回 markdown 链接,不过感觉速度稍慢,而且还是要自己将链接复制到 typora 中,有了新版本的 typora 的这个功能,我们直接将图片贴到 typora 中就不用管了,后台自动上传。
棒棒鸡不棒
2022/09/02
8380
Typora自动上传图片至smms图床
微信小程序上传图片
//添加图片 joinPicture: function (e) { var index = e.currentTarget.dataset.index; var evalList = this.data.evalList; var that = this; var imgNumber = evalList[index].tempFilePaths; if (imgNumber.length >= 3) { wx.showModal({
达达前端
2022/04/29
1.6K0
Nacos Client 1.4.1 版本踩坑记录
就在这周,我接到 MSE Nacos 用户的反馈,说线上 Nacos 不可用,服务都下线了,日志里面也是一堆报错,我下意识以为线上炸了,赶紧上线排查。本文主要记录这次问题的排查过程,以及解决方案。
kirito-moe
2021/06/17
5.3K0
实战|如何使用云开发实现照片附件上传开发
云开发是腾讯云提供的云原生一体化开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用。
腾讯云开发TCB
2021/11/25
1.4K0
实战|如何使用云开发实现照片附件上传开发
业务前端界面报错504排查思路和解决办法
本文主要是写的最近比较影响深刻的一次排查客户访问业务前端域名,报504,timeout错误问题的记录,该客户为私有化部署,给客户部署的服务存在跨洲调用,没有专线,澳洲调用欧洲的服务情况,可能存在网络延迟比较大,需要排查504的具体原因,然后通过优化参数临时解决
没有故事的陈师傅
2022/09/15
2.7K0
业务前端界面报错504排查思路和解决办法
推荐阅读
相关推荐
从皮肤同步失败的问题来看输入法服务端和客户端的交互
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档