java文件断点续传下载或视频播放

  • 代码

代码

     @GetMapping("/download")public void download(Long id, HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException {Tfile findTfile  = fileService.getById(id);//获取路径String fullPath = findTfile.getPath();//创建本地文件对象File downloadFile = new File(fullPath);// 请求数据范围字符串String range = request.getHeader("Range");long startByte = 0;long endByte = downloadFile.length() - 1;if (range != null && range.contains("bytes=") && range.contains("-")) {String rangeFormat = range.substring(range.lastIndexOf("=") + 1).trim();String ranges[] = rangeFormat.split("-");try {if (rangeFormat.startsWith("-")) {endByte = Long.parseLong(ranges[1]);}else if (rangeFormat.endsWith("-")) {startByte = Long.parseLong(ranges[0]);}else if (ranges.length == 2) {startByte = Long.parseLong(ranges[0]);endByte = Long.parseLong(ranges[1]);}} catch (NumberFormatException e) {e.printStackTrace();startByte = 0;endByte = downloadFile.length() - 1;}}long contentLength = endByte - startByte + 1;response.setHeader("Accept-Ranges", "bytes");       response.setContentType("application/octet-stream");//文件名String filename = findTfile.getName();try {if (request.getHeader("User-Agent").contains("MSIE")) {filename=URLEncoder.encode(filename,"UTF-8");}else {filename=new String(filename.getBytes("UTF-8"),"ISO-8859-1");}} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}response.setHeader("Content-Disposition",String.format("attachment;filename=\"%s\"", filename));response.setHeader("Content-Length", String.valueOf(contentLength));if (range != null && range.contains("bytes=") && range.contains("-")) {response.setStatus(response.SC_PARTIAL_CONTENT);response.setHeader("Content-Range", "bytes " + startByte + "-" + endByte + "/" + downloadFile.length());}BufferedOutputStream outputStream = null;RandomAccessFile randomAccessFile = null;long transmitted = 0;try {randomAccessFile = new RandomAccessFile(downloadFile, "r");outputStream = new BufferedOutputStream(response.getOutputStream());int bufLen = (int) (contentLength < 2048 ? contentLength : 2048);byte[] buff = new byte[4096];int len = 0;randomAccessFile.seek(startByte);while ((transmitted + len) <= contentLength && (len = randomAccessFile.read(buff)) != -1) {outputStream.write(buff, 0, len);transmitted += len;}if (transmitted < contentLength) {len = randomAccessFile.read(buff, 0, (int) (contentLength - transmitted));outputStream.write(buff, 0, len);transmitted += len;}outputStream.flush();response.flushBuffer();randomAccessFile.close();} catch (ClientAbortException e) {} catch (IOException e) {e.printStackTrace();} finally {try {if (randomAccessFile != null) {randomAccessFile.close();}} catch (IOException e) {e.printStackTrace();}}}

java文件断点续传下载或视频播放相关推荐

  1. iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载

    前言:iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载是在前篇iOS开发之网络编程--使用NSURLConnection实现大文件下载的基础上进行    断点续传的设置 ...

  2. Java文件断点续传

    Java文件断点续传 断点续传实现思路:将大文件均分成几块后,每个线程分别处理一块数据的读取和写入.每次写入都要更新记录的日志文件,断网或暂定后重新开始传输时,根据日志文件的信息,可以接着读取写入数据 ...

  3. java list断点续传_java实现文件断点续传下载功能

    本文实例为大家分享了java断点续传下载的代码,供大家参考,具体内容如下 1. Java代码 //实现文件下载功能 public String downloadFile(){ File dir = n ...

  4. java 文件打包下载

    话不多说,直接上代码 方法需要传入文件目录,比如想打包1目录下的2目录,同时2目录包含3和4目录,name就传入1目录就可以了 打包之后 /*** 文件打包下载** @param src 需要打包的文 ...

  5. java文件批量下载打包成zip

    1.首先html页面获取当前需要下载文件的id集合将转成字符串形式传递到后台. ................ 2 .下面就是获取字符串之后的批量下载/*** 多文件批量下载压缩成zip**root ...

  6. java文件客户端下载_使用Java写一个minio的客户端上传下载文件

    标签:color   ati   tty   java   system   wired   format   media   param 前言: 确保已经安装了minio的服务端 代码: pom.x ...

  7. java文件流下载excel_React获取Java后台文件流下载Excel文件

    记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程,关键部分代码如下. 首先在java后台中设置response中的参数: public void exportExcel(Htt ...

  8. java文件流方式下载文件

    该方式Java中基本上都通用,主要4个步骤,下面的ServletContext对象可以不用,可以根据自己的方式来. 这里我使用的是SpringMVC,不过它在这里的唯一用途就是用来获取ServletC ...

  9. java文件批量下载

    /** * 批量下载控制 * @param response * @param request */ @RequestMapping(value = "/file/batDownload&q ...

最新文章

  1. hdu4370 比较抽象的最短路
  2. eclipse配置mysql教程_在Eclipse连接mysql-----配置jbdc_MySQL
  3. python中的取余运算符是_python取余运算
  4. ethz研究生申请官网
  5. Linux shell变量的命名规范
  6. cuda入门——改良第一个 CUDA程序
  7. 调用非.net系统的Webservice的探索 ( 三 ) -WCF
  8. promtail 配置详解_基于loki+promtail+grafana技术的日志集合
  9. 快速修复 Log4j2 远程代码执行漏洞步骤
  10. MySQL left join right join inner join 区别
  11. mac os x 系统安装 genymotion android 模拟器
  12. python web开发 编写web框架
  13. 完美且精准的 IE10- 版本检测。
  14. 机器学习——卷积神经网络(CNN)
  15. [EXCEL高级应用与数据分析].沈浩.扫描版 百度云盘
  16. Android 12之启动画面Splash Screens(一) -- 适配
  17. matlab的解线性方程组
  18. linux匿名邮件,Linux下用mutt给QQ邮箱发匿名邮件
  19. 服务器先装系统还是先做热备,安装ibm服务器双机热备操作系统图文详细步骤.doc...
  20. Powerdesigner显示表的comment和列的comment的方法

热门文章

  1. 广播(broadcast)的简单解析与实例运用
  2. python 评论分析_基于Python-Snownlp的新闻评论数据分析
  3. 2020“智创未来 · 精彩平度”创新创业大赛阶段性成果概览
  4. 适配阿拉伯文镜像页面
  5. 侯延堂-FlashGet
  6. Echarts实现情人节的告白:爱情旅游日记照片墙WE记录我们的世界足迹
  7. 论文笔记—LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain
  8. 人件札记:开放式的办公室环境
  9. win10多合一原版系统_win10简体中文64位16299.15多合一版本
  10. 面试的时候我为什么会紧张