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)相关推荐

  1. 一行Java代码实现获取上传文件的后缀名

    场景 在进行上传文件时,需要对上传的文件进行重命名,那么就需要获取 上传文件的后缀名. 实现 //获取上传文件名fileName = file1.getOriginalFilename(); //获取 ...

  2. php 批量改文件名后缀名_PHP 批量修改文件名/文件后缀名(扩展名)

    今天我有几千个文件要一次修改文件或把后缀名给改了,但是我要手工一个个去改,不得改几天后来想到一个办法,利用php写一个量修改文件名/文件后缀名程序,一下就实现了,下面来看看方法. 几个关键的函数. i ...

  3. 获取上传文件的后缀名

    在做项目中,上传文件是经常会碰到的,所以经常要对文件的类型进行判断---也就是对文件后缀名进行判断,用javascript可以很容易的做到这一点. <!DOCTYPE html PUBLIC & ...

  4. 文件名(后缀名)修改

    今天发现之前帮女朋友下载的很多小视频都是*.rmv的格式,刚好我的默认播放器是不支持.我就想把这些视频文件都改成*.RMVB的格式. 就自己写了段代码来实现 文件名(后缀名)修改的小函数.刚开通博客就 ...

  5. 教你给每个文件的文件名、后缀名一键重命名的操作方法

    当我们需要一次性修改多个文件名及后缀名的话如何进行操作才能快速完成重命名工作呢?下面就来给大家分享批量操作的方法,希望可以帮助大家提高完成工作的效率吧,下面一起看操作. 准备工具: 下载一个[文件批量 ...

  6. FileUtils【获取SD卡根目录、读写文件、移动、复制、删除文件、获取文件名、后缀名操作类】...

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装了获取SD卡根目录路径.以及对文件读写.获取文件名等相关操作. 因为需要用到android.permission.READ_EX ...

  7. Android 编译错误:CreateProcess error=206, 文件名或扩展名太长。

    最近更新了Android Studio 之后Android studio 编译错误:CreateProcess error=206, 文件名或扩展名太长. 原因为 bin 文件的路径层级太多 解决方法 ...

  8. c语言;文件名批量修改要求可以修改整个文件内文件名或后缀名自动,ubuntu批量修改文件名字(换动画资源必用)...

    Ubuntu 16.04 批量改文件名 在Ubuntu16.04下给文件批量改名可以使用rename命令. MATLAB中批量修改文件的名字 在运行matlab时有时需要用统一的文件格式,这个时候对文 ...

  9. python获取文件夹下指定后缀名文件列表(可手工设定是否遍历子文件夹)cmd复制文件命令使用

    打算写一个替换文件的程序,该文件可能在不同文件夹路径,使用python操作肯定最方便,特此简单整理封装了两个python函数和一个cmd复制文件的命令方法,供自己翻阅或来者参考 辉 2022.8.9. ...

最新文章

  1. anaconda怎么下载python3.6_Anaconda Python3.6下载
  2. ElementUI改变el-table的表头颜色以及各行的颜色
  3. C++编程连接string字符串和int数字的好方法
  4. 汇编语言 -第十一章
  5. etcd v3 集群——简单配置
  6. OSPF高级特性——LSA-3(Network Summary LSA)的过滤、路由协议——管理距离的修改、外部路由的metric值的修改
  7. 删除顽固文件的执行代码,删除rhsa属性文件,删除服务器中黑客留下...
  8. python异常(概念、捕获、传递、抛出)
  9. Yii Framework2.0开发教程(2)使用表单Form
  10. 动态库的隐式链接和显示链接
  11. 怎么使用虚拟机装服务器系统,如果使用VMware虚拟机创建系统,超详细安装图文教程...
  12. html+css实现小米商城
  13. 无法通过 Internet 连接到 Visual Paradigm 的服务器
  14. ubuntu14.04安装Kile
  15. python进阶day4
  16. C/c++中内存拷贝函数memcpy详解
  17. list组件设置flex-direction:row之后,设置的高度不生效
  18. 流体计算对计算机的配置要求,ANSYS软件对电脑的配置要求怎么样?
  19. html 文本标签点击复制,点击复制-点击div或者p标签复制内容到剪切板
  20. 增值税发票开票软件(税务UKey版) 发邮件提示连接邮件服务器失败

热门文章

  1. OpenSSL之EVP(一)——数据结构及源码结构介绍
  2. java 分页查询的实现
  3. 【元胞自动机】基于元胞自动机模拟晶体生长附matlab代码
  4. HTML/PHP/MySQL实现登录界面、连接数据库、数据库查询、数据在页面展示
  5. UMG使用UE的取色器/吸色器 SColorPicker
  6. arcgis的(添加面)点转线,线转面
  7. ArcGIS 一级文件夹下的所有GDB中的所有要素类重命名
  8. 点击化学DBCO-PEG-SPDP|二苯并环辛炔-聚乙二醇-3-(2-吡啶二硫代)丙酸N-羟基琥珀酰亚胺酯
  9. Vuforia核心特征视频教程
  10. 【JavaSE 第八天】