最近项目遇到断点续传下载大文件的需求,网上百度了一下,找到了解决方式,感谢大帝的无私奉献。

为了将网盘下载的效果模仿的更真实,特将原作者的代码完善,本着为小白省下完善代码的时间考虑,写了这篇文章。

原作者地址我放到文章末尾,废话不多说,直接上代码!

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;/*** 断点续传(仿百度网盘下载功能)** @author: mj* @date: 2022年3月2日14:50:43*/
public class FileDownLoadUtils {public static void main(String[] args) {//指定URL
//        String url = "https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso";String url = "https://mirrors.aliyun.com/centos/2/centos2-scripts-v1.tar";//下载文件后的本地存储路径String downLoadFilePath = "D:\\Download";//下载文件downLoadFile(url, downLoadFilePath);}/*** 读取目录地址,创建临时文件** @param url              文件下载地址* @param downLoadFilePath 下载文件本地文件夹存储路径*/private static void downLoadFile(String url, String downLoadFilePath) {//临时文件后缀名String temp = ".temp";try {//获取文件路径URL uri = new URL(url);String filePath = uri.getFile();//指定本地下载的目录地址File file = new File(downLoadFilePath);//生成一个临时文件(目的:主要是记录数据的下标位置(字节长度))String tempFilePath = file.getAbsolutePath() + File.separator + filePath.substring(filePath.lastIndexOf("/") + 1) + temp;file = new File(tempFilePath);//如果目录不存在,则创建if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}//将url中的数据流对象,写入到临时文件中filewriteFile(uri, file);//将临时文件重命名为正常文件名file.renameTo(new File(tempFilePath.substring(0, tempFilePath.lastIndexOf(temp))));} catch (MalformedURLException e) {e.printStackTrace();}}/*** 通过url获取服务器对象流,并写入到文件中file** @param uri  文件下载地址* @param file 临时文件*/private static void writeFile(URL uri, File file) {byte[] bytes = new byte[1024 * 1024];//定义流对象InputStream inputStream = null;//数据流FileOutputStream fileOutputStream = null;//写入file对象数据流int byteCount = 0;//根据URL和服务器建立连接---数据流try {fileOutputStream = new FileOutputStream(file, true);//建立连接,获取对象流inputStream = getInputStream(uri, file.length());while ((byteCount = inputStream.read(bytes)) != -1) {//数据流---file临时文件中fileOutputStream.write(bytes, 0, byteCount);}} catch (Exception e) {e.printStackTrace();} finally {//关闭流对象if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (fileOutputStream != null) {try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 建立与下载文件的连接,获取下载文件的对象流** @param uri             文件下载地址* @param startFileLength 临时文件已下载数量* @return*/private static InputStream getInputStream(URL uri, long startFileLength) {InputStream inputStream = null;HttpURLConnection connection;try {//            URL filePath = new URL(url);//和服务器建立连接、获取文件路径connection = (HttpURLConnection) uri.openConnection();//开启连接connection.setConnectTimeout(3 * 1000);//连接超时时间long endFileLength = connection.getContentLengthLong();//文件的总长度if (startFileLength < endFileLength) {//还没下载完毕connection.disconnect();//销毁链接connection = (HttpURLConnection) uri.openConnection();//开启连接connection.setConnectTimeout(3 * 1000);//连接超时时间connection.setRequestProperty("RANGE", "bytes=" + startFileLength + "-");//设置请求发送下标的对象System.out.println(connection.getContentLengthLong());inputStream = connection.getInputStream();}} catch (Exception e) {e.printStackTrace();}return inputStream;}

原文地址:https://www.cnblogs.com/fangts/p/15007778.html

大文件下载断点续传后台功能,模仿百度网盘下载功能相关推荐

  1. ThinkPHP实现百度网盘下载功能,必备!

    很多小站应该有需要让用户下载一些东西,比如报名表什么的,前两天看过一个教程,就有利用百度网盘实现自己网站下载的方法,今天就分享出来给大家 <?php/*将本代码保存为bd.php 即可 利用 f ...

  2. php 百度网盘功能,ThinkPHP实现百度网盘下载功能,必备!

    很多小站应该有需要让用户下载一些东西,比如报名表什么的,前两天看过一个教程,就有利用百度网盘实现自己网站下载的方法,今天就分享出来给大家 /*将本代码保存为bd.php 即可 利用 file_get_ ...

  3. 百度网盘php文件怎么打开,如何通过网页版百度网盘下载大文件

    最近老张需要在百度网盘下载一个较大的文件,结果他要我必须下载客户端才行, 此背景下,在网站找了各种办法,什么模拟手机,F12查看下载链接都不行,最后找到了可行的办法. 步骤如下: 一:如果是别人分享的 ...

  4. duilib基本布局学习(模仿百度网盘)及绑定按钮事件

    使用的网易版本的duilib: https://github.com/netease-im/NIM_Duilib_Framework 重写demo中basic.xml页面的布局,熟悉布局语法,类似于h ...

  5. 利用浏览器调试功能 计算 百度网盘 文件数量 V2

    最近需要统计百度网盘里文件的数量,百度网盘又没有提供这样的功能,因此之前自己写了段脚本进行查验,见<利用浏览器调试功能 计算 百度网盘>.之后发现每个目录最多文件数只有1000,因此研究了 ...

  6. 最新版SIM卡管理工具MAGICSIM V25.0(新版多功能SIM卡读卡软件) 百度网盘下载地址

    [基本介绍] 最新SIM卡管理工具MAGICSIM  1.可对SIM卡电话薄进行备份及编辑: 2.可对SIM卡短信进行备份及编辑: 3.可对SIM卡PIN码进行管理:开启.禁用或修改PIN码: 4.可 ...

  7. 分享百度网盘下载搜索神器和一些实用浏览器插件

    前段时间(端午节期间)折腾电脑,用虚拟机安装mac 10.13,但安装包太大,6.5G. 顺便放下我安装时参考的链接,说不定有人也想安装mac试试,不过我试验的是安装后比较卡.验证在vm12下安装os ...

  8. 在Linux环境下通过百度网盘下载并安装matlab2017a

    前言 百度网盘下载matlab2017a安装包 方式1:安装百度网盘的python程序bypy 方式2:直接在浏览器下载 安装matlab 备注 参考链接 前言 最近参加一个比赛,需要在官方公布的li ...

  9. IDM下载器使用方法详解:百度网盘下载,视频会员一网打尽!

    idm是海内外都非常受欢迎的一款下载管理软件.它支持视频媒体嗅探和多线程下载,能够完美替代谷歌Chrome浏览器.Edge浏览器等浏览器的原生下载功能.在浏览器中单击下载链接时,idm将接管浏览器的原 ...

最新文章

  1. 服务器登录中心,为数据中心配置登陆服务器来进行远程访问
  2. 移动应用发展远超Web 谷歌苹果将主导世界?联网的发展才刚刚开始
  3. npm 安装yarn_问题解决记录-npm和yarn全局安装成功后命令无法执行的问题
  4. 【Cf Edu #47 F】Dominant Indices(长链剖分)
  5. 【英语学习】【Level 07】U02 Live Work L3 The best of Shanghai
  6. PHP的OB缓存(输出缓存)
  7. Android Launcher3 开启旋转后有部分任务在旋转后会显示出来
  8. bs4 乱码_python使用beautifulsoup乱码问题
  9. 基于Layabox引擎的魔塔微信小游戏设计与实现
  10. SSD浅层网络_ssd目标检测
  11. 幼儿园计算机网络教室工作计划,2017年幼儿园教学工作计划范文
  12. ubuntu18.10安装redshift护眼软件
  13. 【javascript激增的思考02】模块化与MVC
  14. 欧美html游戏,欧美HTML社区服务游戏
  15. IDEA下载源码报错 Cannot reconnect.
  16. 数据爬取-奇技淫巧系列1——抓取隐藏在CDN,防爬代理等服务后面的数据
  17. 计算机图形设计论文 真实图形生成技术的发展,计算机图形设计论文真实图形生成技术的发展.docx...
  18. 编程实战(4)——python识别图像中的坐标点并保存坐标数据
  19. win7用友u8安装教程_用友U8+v12.5安装教程_用友u8erp软件安装步骤图文教程
  20. 顺推归纳法_采用顺推归纳法求解的适用范围是( )

热门文章

  1. HTML学生个人网站作业设计:动漫网站设计——我的英雄学院漫画(5页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  2. 成长励志名言 (持续日积月累)
  3. 优麒麟:打造全球最好用的Linux开源操作系统
  4. java泛型之自限定类型和参数协变
  5. 图书馆管理系统程序测试计划
  6. PAT 基础编程题目集(编程题1-38)题解
  7. C#常用的几个ORM框架及简单对比
  8. 利用数据库复制技术 实现数据同步更新[摘]
  9. 金融数据分析必备的126个数据源
  10. 一周精彩内容分享(第 2 期):年味去了哪里?