Android 文件下载,根据url获取真正的文件名和后缀名(包括重定向的url)

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 讲解还是很详细的。

每日语录:

许多人在说自己孤独,说自己孤独的人其实并不孤独,孤独不是冷落和遗弃,而是无知己和不被理解。孤独者不言孤独,偶尔作声长啸,如我们看到的兽。

住楼就住顶楼,居高而望远,看戏就坐后排,看不清戏却看得清看戏的人。

---《自在独行》贾平凹

单曲循环《出现又离开》

最后:耶!马上中秋了!!!

你可能感兴趣的:(Android 文件下载,根据url获取真正的文件名和后缀名(包括重定向的url))