Android文件下载时,有时候我们需要根据url拿到要下载文件的名字和后缀。
url分两种,
一种是静态url:即url后面就是文件名,例如:https://qd.myapp.com/myapp/qqteam/AndroidQQ/mobileqq_android.apk (qq)这个时候,我们可以直接截取最后一个'/'然后拿到文件和后缀。
但是另一种url是接口地址,对应云端程序会响应并返回真实的文件URL,重定向后的URL里是会包含文件名和后缀的。
对于这种重定向的url,我们该如何拿到文件名和后缀呢。网上一查,方法有很多,可是经过测试,有很多都拿不到真正的文件名和后缀。其实,这里就是对于重定向的的处理,这个问题可以转换成,如何拿到重定向以后的真正url.好像这样来查,就准确多了。
我们项目的网络框架用的是okhttp,所以我这里只写了通过okhttp拿到真正url的方法,其实很简单,因为okhttpp已经帮我们处理好重定向了:
public String getFileName(String url) {
String fileName = null;
if (!TextUtils.isEmpty(url)) {
try {
OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象
Request request = new Request.Builder()
.url(url)//请求接口。如果需要传参拼接到接口后面。
.build();//创建Request 对象
Response response = client.newCall(request).execute();//得到Response 对象
HttpUrl realUrl = response.request().url();
Log.e("zmm", "real:" + realUrl);
if (realUrl != null) {
String temp = realUrl.toString();
fileName = temp.substring(temp.lastIndexOf("/") + 1);
}
} catch (IOException e) {
e.printStackTrace();
Log.e("zmm", "Get File Name:error" + e);
}
}
Log.e("zmm", "fileName--->" + fileName);
return fileName;
}
亲测有效,对于重定向我也是一知半解,大概就是:对于重定向的处理依靠递归,直到真实地址不变化,获取到的就是最终下载地址。具体关于okhttp的重定向处理可自行百度,我当初是看的这篇文章:https://segmentfault.com/a/1190000008616578 讲解还是很详细的。
每日语录:
许多人在说自己孤独,说自己孤独的人其实并不孤独,孤独不是冷落和遗弃,而是无知己和不被理解。孤独者不言孤独,偶尔作声长啸,如我们看到的兽。
住楼就住顶楼,居高而望远,看戏就坐后排,看不清戏却看得清看戏的人。
---《自在独行》贾平凹
单曲循环《出现又离开》
最后:耶!马上中秋了!!!