[FAQ1]下载A图片,再下载B图片时,提示,“该文件已存在,是否覆盖”(Server提供不
规范的下载pic url导致)
[DESCRIPTION]
进入浏览器,下载一图片后,再下载其他图片时,提示,“该文件已存在,是否覆盖”
详细问题描述:
1、 例如登录百度网页,进入图片库,选择一个图片打开,长按该图片调出选项菜单,选择“保存图片”进行图片下载;
2、 再切换到下一张图片,长按该图片调出选项菜单,选择“保存图片”进行图片下载进行图片下载。
Result:有时会提示“该文件已存在,是否覆盖”。
[Cause]
当长按下载时,不会有图片的任何信息,只有图片的url,所以此时下载,只会根据url来获取文件名。
这里,具体解析url获取文件名的方法是在
alps/packages/apps/Browser/src/com/android/browser/DownloadHand的
onDownloadStartNoStream()方法,String filename = URLUtil.guessFileName(url,
contentDisposition, mimetype);而此方法具体在framework,可以自己看下,Google默认会过滤掉url中'?'后面的条件匹配字符。
举例如下(分析登录百度网页下载图片的LOG):
baidu server 提供规范的下载pic url :
03-22 18:26:09.680 682 2335 I DownloadManager: Initiating request for
download 3,currentThread id: 86
03-22 18:26:09.895 682 2335 V DownloadManager: writing
http://t1.baidu.com/it/u=353759805,906057158&fm=19&gp=0.jpg to
/storage/sdcard0/Download/u=353759805,906057158&fm=19&gp=0.jpg
03-22 18:26:33.148 682 2406 I DownloadManager: Initiating request for
download 5,currentThread id: 107
03-22 18:26:33.327 682 2406 V DownloadManager: writing
http://t3.baidu.com/it/u=4274691656,2158184984&fm=19&gp=0.jpg t/storage/sdcard0/Download/u=4274691656,2158184984&fm=19&gp=0.jp
前两次下载时server pic url 分别是:
http://t1.baidu.com/it/u=353759805,906057158&fm=19&gp=0.jpg
http://t3.baidu.com/it/u=4274691656,2158184984&fm=19&gp=0.jpg
webkit 解析出的file name 依次是:
u=353759805,906057158&fm=19&gp=0.jpg
u=4274691656,2158184984&fm=19&gp=0.jpg
--file name不一样,所以没有弹出"file already exist" alertdialog.
baidu server 提供不规范的下载pic url
03-22 18:27:12.966 682 2470 I DownloadManager: Initiating request for
download 6,currentThread id: 122
03-22 18:27:13.153 682 2470 V DownloadManager: writing
http://timg01.baidu1img.cn/timg?imagewise_list&size=b320_416&quality=&sec=1363948f0d8cfa78ad91101ddd90c7a710&src=http%3A%2F%2Ft1.baidu.com%2Fit%
26691%2C356014008%26fm%3D17 to /storage/sdcard0/Download/timg.
03-22 18:27:36.874 682 2512 I DownloadManager: Initiating request for
download 7,currentThread id: 136
03-22 18:27:37.090 682 2512 V DownloadManager: writing
http://timg01.baidu1img.cn/timg?imagewise_list&size=b320_416&quality=&sec=13639480
b65a5fea9c32165e38cbdf13ee3&src=http%3A%2F%2Ft1.baidu.com%2Fit%为
46258%2C3952876324%26fm%3D17 to /storage/sdcard0/Download/timg.
最后两次下载时,server pic url分别是:
http://timg01.baidu1img.cn/timg?imagewise_list&size=b320_416&quality=&sec=1363948
f0d8cfa78ad91101ddd90c7a710&src=http%3A%2F%2Ft1.baidu.com%2Fit%
为26691%2C356014008%26fm%3D17
http://timg01.baidu1img.cn/timg?imagewise_list&size=b320_416&quality=&sec=13639480没
b65a5fea9c32165e38cbdf13ee3&src=http%3A%2F%2Ft1.baidu.com%2Fit%
为46258%2C3952876324%26fm%3D17
webkit 解析filename时却掉了?后面的query string,得到的filename 分别是:timg.jpeg
timg.jpeg得到的file name 是一样的,所以按照cu feature, 弹出"file already exsit " alert
dialog.--综上所述:root cause是baidu server 提供的下载pic url 不规范导致