一、下载文件请求

    @RequestMapping(value = "/file/download")@ResponseBodypublic Res download(HttpServletRequest request, HttpServletResponse response) {File file = new File(request.getParameter("fileName"));if (file.exists()) {String range = request.getHeader("Range");if (range != null && (range = range.trim()).length() > 0) {Pattern rangePattern = Pattern.compile("^bytes=([0-9]+)-([0-9]+)?$");Matcher matcher = rangePattern.matcher(range);if (matcher.find()) {Integer start = Integer.valueOf(matcher.group(1));Integer end = 0;String endStr = matcher.group(2);if (endStr != null && (endStr = endStr.trim()).length() > 0)end = Integer.valueOf(endStr);downLoadByBreakpoint(file, start, end, response);return null;}}downLoadAll(file, response);return null;}return Res.fail("文件不存在");}

二、断点下载

 public void downLoadByBreakpoint(File file, long start, long end, HttpServletResponse response){OutputStream stream = null;RandomAccessFile fif = null;try {if (end <= 0) {end = file.length() - 1;}stream = response.getOutputStream();response.reset();response.setStatus(206);response.setContentType("application/octet-stream");response.setHeader("Content-disposition", "attachment; filename=" + file.getName());response.setHeader("Content-Length", String.valueOf(end - start + 1));response.setHeader("Accept-Ranges", "bytes");response.setHeader("Content-Range", String.format("bytes %s-%s/%s", start, end, file.length()));fif = new RandomAccessFile(file, "r");fif.seek(start);long index = start;int d;byte[] buf = new byte[10240];while (index <= end && (d = fif.read(buf)) != -1) {if (index + d > end) {d = (int)(end - index + 1);}index += d;stream.write(buf, 0, d);}stream.flush();} catch (Exception e) {try {if (stream != null)stream.close();if (fif != null)fif.close();} catch (Exception e11) {}}}

三、普通全量下载

    public void downLoadAll(File file, HttpServletResponse response){OutputStream stream = null;BufferedInputStream fif = null;try {stream = response.getOutputStream();response.reset();response.setContentType("application/octet-stream");response.setHeader("Content-disposition", "attachment; filename=" + file.getName());response.setHeader("Content-Length", String.valueOf(file.length()));fif = new BufferedInputStream(new FileInputStream(file));int d;byte[] buf = new byte[10240];while ((d = fif.read(buf)) != -1) {stream.write(buf, 0, d);}stream.flush();} catch (Exception e) {try {if (stream != null)stream.close();if (fif != null)fif.close();} catch (Exception e11) {}}}

Java web文件下载断点续传相关推荐

  1. Java Web文件下载

    Web文件下载有两种.一种是文件在站点文件夹下.在浏览器中直接输入文件路径就可以下载.如http://www.xxx.com/file.zip.第二种是文件不在站点文件夹下或者文件是动态生成的(导出报 ...

  2. java web 文件下载

    java通用文件下载 前端:简单的一个标签 <a href="../emp/OriDownload.do?fileName=421785d6-d76c-46a5-86b4-2cfcb9 ...

  3. Java Web——文件下载getResourceAsStream()返回NULL解决方案

    问题描述 严重: Servlet.service() for servlet [club.zstuca.demo.DownloadDemo] in context with path [/DEMOWe ...

  4. Java Web——文件下载时中文文件名乱码问题解决方案

    问题描述 问题分析 浏览器匹配与编码问题. 解决方案 request.setCharacterEncoding("UTF-8");//response.setContentType ...

  5. java downloadfile_FileDownload.java:文件下载工具类

    FileDownload.java:文件下载工具类 2017-04-25·Mr.Xia 4489 次浏览 文件下载功能的工具类 JavaWeb工具类目录 [http://baike.xsoftlab. ...

  6. PHP实现文件下载断点续传详解

    如果我们的网站提供文件下载的服务,那么通常我们都希望下载可以断点续传(Resumable Download),也就是说用户可以暂停下载,并在未来的某个时间从暂停处继续下载,而不必重新下载整个文件. 通 ...

  7. centos 安装java web_Centos上安装java web的环境

    Centos上安装java web的环境 ,本次例子尽量不用yum形式安装(因为我不知道yum安装怎么指定目录,想把java,tomcat,mysql安装到指定的文件夹下,好管理). (java和to ...

  8. 初学Java Web(2)——搭建Java Web开发环境

    虽然说 html 和 css 等前端技术,是对于 Web 来说不可或缺的技术,但是毕竟更为简单一些,所以就不详细介绍了,没有基础的同学可以去菜鸟教程或者W3school进行自主学习,最好的方式还是做一 ...

  9. 初学Java Web(4)——Servlet学习总结

    经过一段时间的学习,对于Servlet有了新的不一样的见解,在这里做一下总结,将近来学习到的知识总结一下. Servlet 的请求流程 浏览器发出请求:http://localhost:80/xxx1 ...

最新文章

  1. 一道并查集的(坑)题:关闭农场closing the farm
  2. python装饰器作用-Python装饰器用法实例总结
  3. 这次被问懵了!搞定了这些SQL优化技巧,下次横着走
  4. 《JavaScript高级程序设计》读书笔记 ---if语句
  5. Java存储图书信息
  6. 解决 npm 无法安装 devDependencies 下的依赖包的问题
  7. Windows 7硬件驱动搜索更加智能、精确
  8. 大数据实战之spark安装部署
  9. mysql5.7版本windows的安装
  10. app inventor制作手机蓝牙遥控器
  11. github访问加速
  12. Label free定量蛋白质组学
  13. rinetd 端口转发
  14. mac 文字识别软件ocr_树洞OCR文字识别软件for mac-树洞OCR文字识别mac版v1.2.0 最新版-腾牛苹果网...
  15. 学微信小程序要学些什么?
  16. 浏览器主页劫持的解决办法
  17. Unexpected Exception caught setting '' on 'class com.: Error setting expression '' with value ['', ]
  18. 输入在第一行中给出一个正整数n(1)。第二行输入n个整数,用空格分开。在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
  19. APK签名机制原理详解
  20. 软件开发工程师 - 面试手册

热门文章

  1. java opencsv_用opencsv文件读写CSV文件
  2. service层中有某个事物要立马提交_硬货你要的,binder机制来了
  3. C++ 学习之旅(16)——虚函数与纯虚函数virtual
  4. [数据结构-严蔚敏版]P65离散事件模拟(银行客户的离散事件驱动模拟程序)
  5. 高等数学下-赵立军-北京大学出版社-题解-练习11.2
  6. [Java基础]并发修改异常
  7. JAVA基础知识+基础代码
  8. Oulipo HDU - 1686(哈希或KMP)匹配字符串
  9. 三年级计算机群鸭戏水教案导入,三年级下册信息技术教案-3.7群鸭戏水-插入自选图形|清华版.doc...
  10. 数据结构----二叉树叶子结点到根节点的高度计算