最近负责公司研究新的多渠道打包方案,之前的打包方案太慢了,因此采用了美团Android Signature V2 Scheme签名下的新一代渠道包打包神器 方案进行了多渠道打包。但是由于马虎,在配置多渠道打包定制渠道包的APK的文件名称的时候,在apk文件名称签名多敲了一个空格,因此出出现了FTP文件一直无法下载的悲剧,下面具体描述一下。

在Jenkins成功的时候多渠道包之后,会转移编译好的apk到FTP服务器,如下图所示,Jenkins第557次编译成功后的产物转移到FTP服务器之后,如下所示:

这个时候,用火狐浏览器去点击相应的apk进行下载可以正常下载下来,例如我们就下载XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk到桌面,如下所示:

链接为:

project/Android/Common/App_Android_Trunk/2017-04-14-00-40-55-svn-19462-build-557/%20XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk

成功下载到桌面之后,如下所示:



特别注意上图中的文件名,发现在XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk字符串之前还有一个空格,之前我一直忽略了。

然后我提测给测试人员,测试人员没有安装火狐浏览器,使用的是Google Chrome浏览器,然后一直无法下载下来。我们自己用Google Chrome浏览器来复现一下,如下所示:

我们也下载XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk到桌面,点击链接,直接提示无法访问此网站,如下所示:

可以发现链接为:

/project/Android/Common/App_Android_Trunk/2017-04-14-00-40-55-svn-19462-build-557/XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk

对比一下之前的火狐浏览器的请求

FireFox 浏览器点击请求的链接
/project/Android/Common/App_Android_Trunk/2017-04-14-00-40-55-svn-19462-build-557/%20XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk Google Chrome浏览器点击请求的链接
/project/Android/Common/App_Android_Trunk/2017-04-14-00-40-55-svn-19462-build-557/XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk

我还不信邪了,我又去使用XFTP下载该apk,发现也是报错,如下图所示:

我又换了CuteFTP软件下载该apk,发现可以正常下载,如下图所示:

点击查看刚刚的下载任务属性,发现下载路径有空格符,如下图所示:

下面是XFTP和CuteFTP请求的链接对比

XTFP的请求链接
/project/Android/Common/App_Android_Trunk/2017-04-14-00-40-55-svn-19462-build-557/XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk CuteFTP的请求链接
/project/Android/Common/App_Android_Trunk/2017-04-14-00-40-55-svn-19462-build-557/ XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk

因此可以总结原因就是:

FireFox浏览器和CuteFTP保持FTP服务器上的文件原版路径不改变,因此可以正常下载下来。

而Google Chrome浏览器和XFTP软件,自作聪明的将FTP服务器上的文件的文件名中的空格符去掉了,导致下载请求链接时,链接并不存在,所以无法下载。

手贱,增加了空格符的groovy脚本语言如下所示:

walle {
// 指定渠道包的输出路径
apkOutputFolder = new File("${project.buildDir}/outputs/channels");
// 定制渠道包的APK的文件名称
apkFileNameFormat = ' XTCWatch_'+'v${versionName}_${channel}.apk';
// 渠道配置文件
channelFile = new File("${project.getProjectDir()}/channel")

通过一段时间查找原因,终于找到了是因为文件名加了一个空格符导致无法下载的问题后,修复的groovy脚本语言如下所示:

walle {
// 指定渠道包的输出路径
apkOutputFolder = new File("${project.buildDir}/outputs/channels");
// 定制渠道包的APK的文件名称
apkFileNameFormat = 'XTCWatch_'+'v${versionName}_${channel}.apk';
// 渠道配置文件
channelFile = new File("${project.getProjectDir()}/channel")
}

提交代码,重新Jenkins编译之后,再次用Google Chrome浏览器和XFTP下载多渠道包apk,正常,如下所示:

点击链接下载的话,可以正常下载,如下所示:

使用XFTP也可以正常下载,如下所示:


作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!

转载请保留原文地址:http://blog.csdn.net/ouyang_peng/article/details/70174497

如果本文对您有所帮助,欢迎您扫码下图所示的支付宝和微信支付二维码对本文进行打赏。

一次因为文件名开头包含空格而导致FTP文件一直无法下载的悲剧!的更多相关文章

  1. Linux如何查找处理文件名后包含空格的文件

    Linux如何查找处理文件名后包含空格的文件   当Linux下文件名中出现空格这类特殊情况话,如何查找或确认那些文件名后有空格呢? 又怎么批量替换处理掉这些空格呢? 方法1: 输入文件名后使用Tab ...

  2. Shell 处理文件名中包含空格的文件

    最近在学Gradle, 使用git clone 命令下载了一些资料,但是文件名含有空格,看上去不是很舒服,因此想到用shell脚本对其进行批处理,去掉文件名中的空格,注意这里是把所有的空格全去掉 gi ...

  3. GetPrivateProfileString() 当 key 包含空格时,需要进行转义

    使用 GetPrivateProfileString() 方法可以方便的读取 ini 格式文件中的内容,如: [section] tommy = worker 使用 C# 读取如下: 1. 先引入 G ...

  4. Shell:如何遍历包含空格的文本

    Blog:博客园 个人 翻译自Looping Through a File that Contains Spaces – Bash for Loop 处理包含空格或特殊字符的文件是每个使用Linux的 ...

  5. Linux 下如何处理包含空格和特殊字符的文件名

    Linux 下如何处理包含空格和特殊字符的文件名 作者: Avishek Kumar 译者: LCTT zpl1025 | 2015-07-08 07:47   评论: 12 收藏: 9 分享: 1 ...

  6. linux 进入包含空格文件名的文件夹

    可以使用加英文的引号cd  /usr/chen/java/"MyeClips\ 如果"\"在行末,是说明本行还未结束,下面一行和本行是一起的意思. 一般短格式的选项(一个 ...

  7. [转]Windows中的命令行提示符里的Start命令执行路径包含空格时的问题

    转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提 ...

  8. find + xargs + cp 遇到文件名中带空格如何处理

    一,需求为查询文件名为ZRSH开头的时间为7月至今的所有文件并打包 1.首先想到的就是find + xargs + cp  格式.. find 2016073* -type f  -name *ZRS ...

  9. 转:Windows中的命令行提示符里的Start命令执行路径包含空格时的问题

    转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提 ...

随机推荐

  1. Spider Studio 新版本 (20140225) - 设置菜单调整 / 提供JQueryContext布局相关的方法

    这是年后的第一个新版本, 包含如下: 1. 先前去掉的浏览器设置功能又回来了! 说来惭愧, 去掉了这两个功能之后发现浏览经常会被JS错误打断, 很不方便, 于是乎又把它们给找回来了. :) 2. 为J ...

  2. exchange邮箱系统增加验证码机制

    首先背景是exchange的邮箱系统没有后台源代码.因为这个原因,生成验证码的机制放在aspx的runat="sever"后台代码里面. 首先需要找到iis中logon.aspx文 ...

  3. 关于Linux网卡调优之:RPS (Receive Packet Steering)

    昨天在查LVS调度均衡性问题时,最终确定是 persistence_timeout 参数会使用IP哈希.目的是为了保证长连接,即一定时间内访问到的是同一台机器.而我们内部系统,由于出口IP相对单一,所 ...

  4. svn提示out of date

    你需要先update一下,应该会有一个冲突标志,你查看一下历史日志,找到是谁在你之前进行了提交,和他商议一下如何合并你们两个人的修改,然后在你本地处理后,标记“冲突已解决”,最后再次commit

  5. hdu6143 Killer Names 容斥+排列组合

    /** 题目:hdu6143 Killer Names 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6143 题意:有m种字符(可以不用完),组成两个长度 ...

  6. Jquery动态添加 删除 操作实现

    这是gridView为空数据时显示的表头 下面直接填代码: function Add() { //动态添加行 $("#gridCustomerView").append(" ...

  7. JavaBeans 官方文档学习

    提示,重点:JavaBeans的Property和 Events:PropertyEditor极其注册和查找机制. 从目前来看,JavaBeans 更像是源自GUI的需求. 使用NetBeans新建一 ...

  8. 借用smtp.qq.com发邮件

    至于sentmail和postfix的配置有多么麻烦学生在这里就不多废话了...反正是配置了N个小时,最终弄的头晕眼花也没弄好... 下面的方法可以让你完全摆脱这两个工具...当然,你要是想做邮件服务 ...

  9. Eclipse & Visual Studio

    VS中的解决方案 vs Eclipse中的workspace Maven包管理 vs  Nuget类库管理 build path  vs

  10. iOS面试题--网络--如何处理多个网络请求的并发的情况

    如何处理多个网络请求的并发的情况 一.概念 1.并发 当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配 ...