欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-15 17:59:32
java文件断点续传下载或视频播放代码代码@GetMapping("/download")public void download(Long id, HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException {Tfile findTfile = fileService.getById(id);//获取路径String fullPath = findTfile.g...


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(); } } } 

本文地址:https://blog.csdn.net/weixin_45676137/article/details/108239530

相关标签: 下载 java