一次因爲文件名開頭包含空格而導致FTP文件一直無法下載的悲劇!

最近負責公司研究新的多渠道打包方案,之前的打包方案太慢了,因此採用了美團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
  • 1

成功下載到桌面之後,如下所示:
這裏寫圖片描述
特別注意上圖中的文件名,發現在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
  • 1

對比一下之前的火狐瀏覽器的請求

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
  • 1
  • 2
  • 3
  • 4
  • 5

這裏寫圖片描述

我還不信邪了,我又去使用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
  • 1
  • 2
  • 3
  • 4
  • 5

這裏寫圖片描述

因此可以總結原因就是:

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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

這裏寫圖片描述

通過一段時間查找原因,終於找到了是因爲文件名加了一個空格符導致無法下載的問題後,修復的groovy腳本語言如下所示:

walle {
    // 指定渠道包的輸出路徑
    apkOutputFolder = new File("${project.buildDir}/outputs/channels");
    // 定製渠道包的APK的文件名稱
    apkFileNameFormat = 'XTCWatch_'+'v${versionName}_${channel}.apk';
    // 渠道配置文件
    channelFile = new File("${project.getProjectDir()}/channel")
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

這裏寫圖片描述

提交代碼,重新Jenkins編譯之後,再次用Google Chrome瀏覽器和XFTP下載多渠道包apk,正常,如下所示:
這裏寫圖片描述

點擊鏈接下載的話,可以正常下載,如下所示:
這裏寫圖片描述

使用XFTP也可以正常下載,如下所示:
這裏寫圖片描述

發佈了101 篇原創文章 · 獲贊 222 · 訪問量 258萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章