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. HTML的标签描述2
  2. find_in_set()和in()比较
  3. sap-生产订单的成本理解
  4. 腾讯AI Lab涂兆鹏:如何提升神经网络翻译的忠实度 | PhD Talk #22
  5. java内存图解_图解JAVA内存模型(JMM:JAVA Memory Model)
  6. 杭州市政府数据容灾集中备份业务整体外包(2009)项目招标公告
  7. python网易云_使用Python实现下载网易云音乐的高清MV
  8. 车牌识别SDK原理分析
  9. Python常用数据分析工具
  10. [Windows] 迅雷 无修改 无限制 无视封锁
  11. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day22】—— 并发编程2
  12. android调色器的实现
  13. 猫喜欢吃鱼,可猫不会游泳
  14. 深度学习第一篇论文——半监督学习Mean Teacher 的学习
  15. 初学者学习深度学习,不得不会的Google Colab基本操作
  16. matlab 均值中心化,数据预处理之中心化(零均值化)与标准化(归一化)
  17. Unity实现的汽车方向盘转动效果[完整案例]
  18. Thinkphp 6 使用RSA非对称加密算法 对接口加密解密
  19. Android SpringAnimation 弹簧动画
  20. 子域名 sublist3r

热门文章

  1. 在MySQL命令行下如果输错了命令怎么办?
  2. c语言反应能力的手机游戏,锻炼反应能力的游戏合集
  3. SQL--多的是,你不知道的事
  4. (转)写给找工作的朋友们
  5. Layabox学习笔记
  6. Python爬虫数据入库
  7. 集成电路开发及应用-版图设计专栏目录
  8. 考研常识|夏令营和预推免有什么区别?
  9. 【树莓派】树莓派使用python、E16 GPRS模块向MQTT服务器传输数据
  10. 苹果xr如何截屏_苹果手机必备软件1