URL中的文件大小与存储中的下载文件不同

时间:2016-09-23 22:14:40

标签: android url download filesize downloading

我正在尝试使用Asynctask从URL下载文件。在doInBackground()方法中,我检索文件大小,如下所示。

    lenghtOfFile = conection.getContentLength();

返回一个整数值。现在,下载继续,文件完全下载并写入SD卡。

问题是在我的postExecute()中我想比较URL中文件的大小和下载文件的大小。

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);

        //check if the file was download and know how much of it
        //was downloaded, so as to update ui accordingly
        if(file.exists()){

            Log.e("apiFileSize", String.valueOf(lenghtOfFile));
            Log.e("downloadFileSize", String.valueOf(file.length()));

            //check if the file was completely downloaded
            if(lenghtOfFile == file.length()){
                     ....

正如您所看到的,我记录了两个值,但即使下载已完成并且文件已完全下载,它们也不相同。来自本地存储(sdcard)的文件最终大于来自URL的文件大小。我希望它们是平等的,为什么会这样?我该怎么办?

以下是日志结果。

09-23 22:44:48.203  26594-26594/com.mobile.soullounge E/apiFileSize﹕ 1298573 
09-23 22:44:48.204  26594-26594/com.mobile.soullounge E/downloadedFileSize﹕ 2696392

提前致谢。

1 个答案:

答案 0 :(得分:1)

我假设你正在使用HttpURLConnection

默认情况下,HttpURLConnection的这种实现请求服务器使用gzip压缩,并自动解压缩getInputStream()调用者的数据。 Therafore getContentLength()不能用于确定文件大小。

但是!您可以像这样禁用压缩:

urlConnection.setRequestProperty("Accept-Encoding", "identity");

您的服务器也应设置为正确处理此类情况。