java文件断点续传下载或视频播放
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文件断点续传下载或视频播放相关推荐
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载
前言:iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载是在前篇iOS开发之网络编程--使用NSURLConnection实现大文件下载的基础上进行 断点续传的设置 ...
- Java文件断点续传
Java文件断点续传 断点续传实现思路:将大文件均分成几块后,每个线程分别处理一块数据的读取和写入.每次写入都要更新记录的日志文件,断网或暂定后重新开始传输时,根据日志文件的信息,可以接着读取写入数据 ...
- java list断点续传_java实现文件断点续传下载功能
本文实例为大家分享了java断点续传下载的代码,供大家参考,具体内容如下 1. Java代码 //实现文件下载功能 public String downloadFile(){ File dir = n ...
- java 文件打包下载
话不多说,直接上代码 方法需要传入文件目录,比如想打包1目录下的2目录,同时2目录包含3和4目录,name就传入1目录就可以了 打包之后 /*** 文件打包下载** @param src 需要打包的文 ...
- java文件批量下载打包成zip
1.首先html页面获取当前需要下载文件的id集合将转成字符串形式传递到后台. ................ 2 .下面就是获取字符串之后的批量下载/*** 多文件批量下载压缩成zip**root ...
- java文件客户端下载_使用Java写一个minio的客户端上传下载文件
标签:color ati tty java system wired format media param 前言: 确保已经安装了minio的服务端 代码: pom.x ...
- java文件流下载excel_React获取Java后台文件流下载Excel文件
记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程,关键部分代码如下. 首先在java后台中设置response中的参数: public void exportExcel(Htt ...
- java文件流方式下载文件
该方式Java中基本上都通用,主要4个步骤,下面的ServletContext对象可以不用,可以根据自己的方式来. 这里我使用的是SpringMVC,不过它在这里的唯一用途就是用来获取ServletC ...
- java文件批量下载
/** * 批量下载控制 * @param response * @param request */ @RequestMapping(value = "/file/batDownload&q ...
最新文章
- HTML的标签描述2
- find_in_set()和in()比较
- sap-生产订单的成本理解
- 腾讯AI Lab涂兆鹏:如何提升神经网络翻译的忠实度 | PhD Talk #22
- java内存图解_图解JAVA内存模型(JMM:JAVA Memory Model)
- 杭州市政府数据容灾集中备份业务整体外包(2009)项目招标公告
- python网易云_使用Python实现下载网易云音乐的高清MV
- 车牌识别SDK原理分析
- Python常用数据分析工具
- [Windows] 迅雷 无修改 无限制 无视封锁
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day22】—— 并发编程2
- android调色器的实现
- 猫喜欢吃鱼,可猫不会游泳
- 深度学习第一篇论文——半监督学习Mean Teacher 的学习
- 初学者学习深度学习,不得不会的Google Colab基本操作
- matlab 均值中心化,数据预处理之中心化(零均值化)与标准化(归一化)
- Unity实现的汽车方向盘转动效果[完整案例]
- Thinkphp 6 使用RSA非对称加密算法 对接口加密解密
- Android SpringAnimation 弹簧动画
- 子域名 sublist3r