文件下载显示进度条

         文件下载网络上下载资源,当文件比较小的时候,没有显示进度,可能看不出来什么,但当文件内容比较大,显示出进度条,这样就更加贴切的让用户感到文件下载的状况。

     现在先做一个小例子,主要是现在控制台输出文件下载的进度。

  

package com.tgb.demo;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by zss on 2017/3/5.
 */
public class download {
    public static void dowanload(String url, String path)
            throws IOException {
        System.out.println("下载中...");
        InputStream inputStream = null;
        RandomAccessFile randomAccessFile = null;
        try {
            HttpURLConnection urlConnection = (HttpURLConnection) new URL(url).openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setConnectTimeout(10 * 1000);
            File file = new File(path);
            //文件夹是否存在
            if (!file.getParentFile().exists())
                file.getParentFile().mkdir();
            if (file.exists())
                file.delete();
            file.createNewFile();

            int responseCode = urlConnection.getResponseCode();
            if (responseCode >= 200 && responseCode < 300) {
                inputStream = urlConnection.getInputStream();
                int len = 0;
                byte[] data = new byte[4096];
                //用于保存当前进度(具体进度)
                int progres = 0;
                //获取文件长度
                int maxProgres = urlConnection.getContentLength();
                randomAccessFile = new RandomAccessFile(file, "rwd");
                //设置文件大小
                randomAccessFile.setLength(maxProgres);
                //将文件大小分成100分,每一分的大小为unit
                int unit = maxProgres / 100;
                //用于保存当前进度(1~100%)
                int unitProgress = 0;
                while (-1 != (len = inputStream.read(data))) {
                    randomAccessFile.write(data, 0, len);
                    progres += len;//保存当前具体进度
                    int temp = progres / unit; //计算当前百分比进度
                    if (temp >= 1 && temp > unitProgress) {//如果下载过程出现百分比变化
                        unitProgress = temp;//保存当前百分比
                        System.out.println("正在下载中..." + unitProgress + "%");
                    }
                }
                inputStream.close();
                System.out.println("下载完成...");
            } else {
                System.out.println("服务器异常...");
            }
        } finally {
            if (null != inputStream) {
                inputStream.close();
            }
            if (null != randomAccessFile) {
                randomAccessFile.close();
            }
        }
    }



    public static void main(String[] args) throws IOException {
        String path = "D:\\abc\\image.jpg";
        String url="http://www.dowei.com/d/file/tuku/meinv/2016-01-26/1453788622507000.jpg";
        dowanload(url, path);
    }
}

       下面是显示的效果:

             

      如果想把这个效果做到前端,还需要前台js的控制,这个最近正在研究,应该会很简单,做好之后再添加到这篇博客中,咱们共同分享。

在Python中,使用`requests`库下载文件时,可以通过自定义一个进度条显示下载进度。以下是一个基本的实现方法: 首先,需要安装`requests`库(如果尚未安装): ```bash pip install requests ``` 然后,可以使用以下代码来实现带有进度条文件下载: ```python import requests from tqdm import tqdm def download_file(url, file_name): # 发起请求并获取响应对象 response = requests.get(url, stream=True) # 确保请求成功 response.raise_for_status() # 获取文件总大小 total_size = int(response.headers.get('content-length', 0)) # 打开文件准备写入 with open(file_name, 'wb') as file: # 使用tqdm创建进度条 for data in tqdm(response.iter_content(1024), total=total_size/1024, unit='KB', unit_scale=True): # 将数据写入文件 file.write(data) # 使用示例 download_url = 'http://example.com/file.zip' # 替换为你需要下载的文件链接 download_file(download_url, 'downloaded_file.zip') ``` 在上述代码中,`requests.get`用于发起网络请求,`stream=True`参数使得我们能够以流的方式处理数据,而不是一次性加载整个文件到内存。`response.iter_content`方法用于迭代文件内容,我们以1024字节为单位进行迭代,并使用`tqdm`库来创建和更新进度条。 注意,`tqdm`是一个快速、可扩展的Python进度条库,它可以在长循环中添加一个进度提示信息,用户只需要封装任意的迭代器`tqdm(iterator)`。如果你没有安装`tqdm`,可以通过以下命令安装: ```bash pip install tqdm ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值