android 如何获得网络文件大小

android 如何获得网络文件大小,第1张

public long getFileSize(String urlString) throws IOException,Exception{

long lenght = 0

String url = UrlEncode(urlString, "UTF-8")

//URL mUrl = new URL(urlString)

URL mUrl = new URL(url)

HttpURLConnection conn = (HttpURLConnection) mUrl.openConnection()

conn.setConnectTimeout(5*1000)

conn.setRequestMethod("GET")

conn .setRequestProperty("Accept-Encoding", "identity")

conn.setRequestProperty("Referer", url)

//conn.setRequestProperty("Referer", urlString)

conn.setRequestProperty("Charset", "UTF-8")

conn.setRequestProperty("Connection", "Keep-Alive")

conn.connect()

int responseCode = conn.getResponseCode()

// 判断请求是否成功处理

if (responseCode == HttpStatus.SC_OK) {

lenght = conn.getContentLength()

}

return lenght

}

文件命名后缀如.jpg、.png等等一般即为文件类型,但有些时候不能保证文件后缀名一定有效,所以尝试将后缀转换成对应mime类型,方法如下:

如果转换结果返回为nul,则可以认为后缀名不是有效的文件类型

此方法实际是由查找对应的ContentProvider来获取文件类型,会先在本进程内查找,失败后通过ActivityManagerService跨进程查找。

首先要设置数据源,常用的数据设置有两种方式:

无论哪种设置方式,其本质都是获取文件描述符FileDescriptor,然后调用以下方法:

设置之后直接调用extractMetadata方法,传入keyCode为MediaMetadataRetriever.METADATA_KEY_MIMETYPE,即可得到文件的mime类型。

这个方法是JAVA 1.6版本以后提供的,但是在Android中需要Api 26以上才可以使用,方法中的参数path可以使用File内的toPath()方法获取。

5.1. 使用java中URLConnection提供的“类型猜测”方法查询:

此方法与方法一查询mime方法本质相同,最终都会调用MimeUtils.guessMimeTypeFromExtension方法。MimeUtils中提前缓存了后缀与mime类型的映射关系(先尝试从特定的用户表中加载,如果失败则加载默认的内置表),于是根据传入的后缀查询对应mime。

先读取数据流的前16个字节,根据这16个字节可以判断出绝大部分的文件类型。不过URLConnection下的这个方法只提供网络传输中常用的几种类型判断。

5.2. 根据前16个字节进行判断

以下只列出部分常用类型的应对关系,更多类型可以搜索“根据文件头获取文件类型”查询:

如果确定可转为Bitmap,可以直接使用BitmapFactory.Options中的outMimeType属性。

github: https://github.com/FirstLetterZ/Dependence/tree/master/file

依赖版本: 'io.github.firstletterz:tool-file:0.0.2'

2021-08-10


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11953267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存