Loading [MathJax]/jax/input/TeX/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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
移动端常见白屏问题优化之网络优化篇
图片加载作为重中之重的App体验指标,端侧的白屏问题则是其中最为严重、也是最为常见的问题之一。想象一下如果你在浏览交易商品、社区帖子等核心场景下,图片无法完成加载是多么糟糕的体验。
JackJiang
2024/09/12
2260
移动端常见白屏问题优化之网络优化篇
UEditor导致的上传大文件失败
项目中用到视频上传,两种上传方式,一种直接表单提交,一种内嵌到UEditor中提交,视频文件上传到第三方视频点播服务器,此为前提。
小尘哥
2018/11/07
3.2K0
字节一面:网站显示不出来,怎么排查?
之前有读者在字节一面的时候,被问了这么一个问题:在浏览器输入 URL 并回车后,如果页面迟迟没有出现,怎么去排查问题?
小林coding
2022/10/27
1.8K0
字节一面:网站显示不出来,怎么排查?
js拖拽上传图片
有时候,在开发中,需要遇到拖拽上传图片的需求,即从磁盘选中一张或多张图片,然后按着鼠标把图片拖动到页面上指定的区域,实现图片的上传。
用户1174387
2019/08/15
18.9K0
聊一聊测试过程中接口不通的原因排查
在我们进行接口测试时,大概率会遇到接口调不通的情况,如何排查接口不通,作为测试从业者应该考虑的问题。
漫谈测试
2025/03/13
1640
聊一聊测试过程中接口不通的原因排查
大文件上传原理及实现方案
在网络应用中,大文件上传是一个技术挑战。本文详细解析了大文件上传的核心原理,并探讨了多种实现方案。从基本的文件分割、断点续传到复杂的并行上传,文章涵盖了一系列技术细节和最佳实践,包括如何处理网络波动、提高数据传输效率等关键问题。此外,还介绍了相关的前端和后端技术支持。无论是开发者还是架构师,这篇文章都将提供有力的技术指导和实战参考,帮助读者高效解决大文件上传问题。
京东技术
2024/02/27
2.8K0
大文件上传原理及实现方案
基于端智能的播放QoE优化
 点击上方“LiveVideoStack”关注我们 ▲扫描图中二维码或点击阅读原文▲ 了解音视频技术大会更多信息   //   编者按:伴随着B站业务形式的不断扩展,不同场景对视频播放体验的稳定性、流畅性提出了更高的要求,为保障提供给用户更好的播放体验B站做出了哪些努力?LiveVideoStackCon2022上海站大会我们邀请到了哔哩哔哩 , 资深开发工程师陆元亘老师为我们详细介绍B站在点播QoE优化上的经验与成果。 文/陆元亘 整理/LiveVideoStack 非常荣幸能够参加LiveVideoS
LiveVideoStack
2023/04/04
6430
基于端智能的播放QoE优化
SGADC2019 | 京东移动网络优化及立体化监控体系(深度长文)
在文中,京东余珽介绍了京东移动网络优化方面的实践和收益,开发者可以通过阅读本文了解HTTP2.0、HTTPDNS、图片压缩聚合等传统的移动网络优化手段并应用到业务中。同时本文也详细讲解了在国家推行IPv6的情况下获得IPv6/IPv4双栈网络下的经验和踩坑经历,以及如何构建立体化的异常监控、性能监控体系来提升移动互联网络优化,带来更好的用户体验和业务可用性。
软件绿色联盟
2022/03/31
3.1K0
SGADC2019 | 京东移动网络优化及立体化监控体系(深度长文)
记录一次访问量瞬间增加,导致请求卡住的问题排查过程
2022.11.07号下班路上突然收到许多用户反馈,说小程序进不去了。然后自己试了一下,打开一直转圈,于是快马加鞭赶回家,打开了电脑。
房东的狗丶
2023/02/17
7570
新时代运维监控能力的进化——天网云用户体验监控平台实践
本文介绍了互联网监控平台在腾讯社交网络事业群中的应用,通过监控平台实现实时监控、流量分析、异常事件预警等功能,并应用机器学习技术,实现自动化运营闭环,提高运维效率,保障业务质量。同时,该平台还支持多种接入方式,满足业务不同场景的监控需求,可广泛应用于互联网、移动互联网、工业互联网等领域。
织云平台团队
2017/01/05
4.9K0
新时代运维监控能力的进化——天网云用户体验监控平台实践
实战|如何使用云开发实现照片附件上传开发
云开发是腾讯云提供的云原生一体化开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用。
腾讯云开发TCB
2021/11/25
1.4K0
实战|如何使用云开发实现照片附件上传开发
Flutter中的相机拍照、相册选择图片、上传图片到服务器
需要注意的是,image_picker这个第三方组件只能是单选图片,如果大家有多选图片的需要,可以自己去pub.dev上面去搜索,本文只是针对“选择图片并上传”这一功能点做思路的介绍,所以对于各种第三方,都不会很详细地去讲怎么用。
拉维
2019/09/10
21.3K3
Flutter中的相机拍照、相册选择图片、上传图片到服务器
聊一聊前端上传大文件的几种方式。
使用PHP来展示常规的表单上传是一个不错的选择。首先构建文件上传的表单,并指定表单的提交内容类型为enctype="multipart/form-data",表明表单需要上传二进制数据。
用户6835371
2021/06/01
2.9K0
网络诊断方案选型
一个app的表现,往往和网络状态密切相关。这里的网络诊断主要是针对特定的域名或者ip,也就是说app的网络诊断是对当前网络到域名指向的服务端的连通性和带宽情况。
jerrypxiao
2020/08/04
4.4K0
网络诊断方案选型
搭建cloud框架中遇到的问题(记录篇)
       当我在测试配置网关转发时,发现另一模块根据令牌来云平台取数据的时候,通过实际地址令牌有效,通过网关转发获取不到数据。
余生大大
2022/11/02
2500
搭建cloud框架中遇到的问题(记录篇)
Spring Boot 如何上传大文件?骚操作~
最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。
架构师修炼
2020/12/16
2.4K0
Spring Boot 如何上传大文件?骚操作~
微信小程序上传图片
//添加图片 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
redis超时原因排查
1.低效操作产生的延迟。单命令操作一半很快不会造成这样,SORT,LREM, SUNION,keys ,* 等操作都会影响响应时间。 使用进程监控程序(top, htop, prstat, 等...)来快速查看Redis进程的CPU使用率。如果traffic不高而CPU占用很高,八成说明有慢操作。(top -p pid) slowlog 查询引发延迟的慢命令:(默认超过10毫秒就算慢命令) 只针对慢命令进行统计 slowly get 10 查看前十条慢命令 config get slowlog-log-sl
BGBiao
2018/02/26
7.8K0
业务前端界面报错504排查思路和解决办法
本文主要是写的最近比较影响深刻的一次排查客户访问业务前端域名,报504,timeout错误问题的记录,该客户为私有化部署,给客户部署的服务存在跨洲调用,没有专线,澳洲调用欧洲的服务情况,可能存在网络延迟比较大,需要排查504的具体原因,然后通过优化参数临时解决
没有故事的陈师傅
2022/09/15
2.7K0
业务前端界面报错504排查思路和解决办法
问题记录
测试反馈的是,拍摄了一张图片,上传之后,安卓可以加载出来,iOS显示是黑色,其他图片正常;
莫空9081
2021/08/30
1.3K0
相关推荐
移动端常见白屏问题优化之网络优化篇
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档