/**

* 文件下载

* @param request

* @param response

*/

@RequestMapping(params = "viewFile")

public void viewFile(HttpServletRequest request, HttpServletResponse response) {

InputStream bis = null;

BufferedOutputStream bos = null;

long fileLength = 0;

try {

File filePic = new File(filePath);

fileLength = filePic.length();

if(filePic.exists()){

bis = new BufferedInputStream(new FileInputStream(filePath+"/"+realPath));

if(extend.equals("mp4")) {

response.setContentType("video/mp4"); // 设置返回的文件类型

}else if(extend.equals("mp3")){

response.setContentType("audio/mp3");

}

response.setHeader("Content-disposition", "attachment; filename=" + new String((attachment.getAttachmenttitle()+"."+attachment.getExtend()).getBytes("GBK"), "ISO8859-1"));

response.setHeader("Accept-Ranges", "bytes");

long pos = 0;

long epos = fileLength-1;

if (null != request.getHeader("Range")) {

// 断点续传

response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);

try {

String rangeString = request.getHeader("Range");

rangeString = StringUtils.substringAfter(rangeString,"bytes=");

String s = StringUtils.substringBefore(rangeString, "-");

if(org.apache.commons.lang3.StringUtils.isNotBlank(s)){

pos = Long.parseLong(s);

}else

pos = -1;

String e = StringUtils.substringAfter(rangeString, "-");

if(org.apache.commons.lang3.StringUtils.isNotBlank(e)){

epos = Long.parseLong(e);

}

} catch (NumberFormatException e) {

}

StringBuffer contentRange = new StringBuffer("bytes ");

contentRange.append(pos + "").append("-").append(epos+"");

contentRange.append("/").append(fileLength+"");

response.setHeader("Content-Range", contentRange.toString());

response.setHeader("Content-Length", String.valueOf(epos-pos+1));

bis.skip(pos);

}

if(epos-pos+1 >0){

byte[] buff = new byte[(int)(epos-pos+1)];//缓冲

bos = new BufferedOutputStream(response.getOutputStream());// 得到向客户端输出二进制数据的对象

int readBytes = bis.read(buff, 0, buff.length);

bos.write(buff, 0, readBytes);

}

}

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (bis != null) {

bis.close();

}

if (bos != null) {

bos.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

java 断点续传 开源_java断点续传后台代码相关推荐

  1. java 断点续传 开源_java断点续传原理

    先说说断点续传的原理:这是HTTP 1.1协议的一部分,并不需要客户端特意去做多么复杂的事情.以前我曾经看过一个单位的技术标书,其中有下载的断点续传这一要求,给出的offer居然还挺高的... 简单的 ...

  2. java三层 开源_java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源...

    [实例简介] java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源 [实例截图] [核心代码] java山寨qq聊天工具(基于mvc三层架构,附mvc架构模式p ...

  3. java 线程 函数_java – 从后台线程调用主线程上的函数

    更新 我已经更新了这个问题,使用建议的SwingWorker类包含Java实现的源代码,以实现与Objective-C示例相同的结果.希望这将有助于未来的冒险家. Document myDoc = . ...

  4. Java 仿QQ空间评论 后台代码实现 一张表

    因为项目业务需要,特此写出此仿QQ空间的评论功能,项目如下图所示,records下的是一级评论 里面的commentList是二级评论,前端根据此数据格式渲染即可 表结构如下,其中father_id与 ...

  5. java 抓屏_java抓屏代码

    一个网上找下来的 抓屏代码只需呀输入要存放的路径和名字 就可以执行,但不能为空. import java.awt.Dimension; import java.awt.Rectangle; impor ...

  6. java基础格式_Java基础之代码的基本格式

    每一种编程语言都有一套自己的语法规范,java也是如此,同样需要遵从一定的语法规范,如代码的书写.标识符的定义.关键字的应用等.因此要学好Java就要先熟悉它的基本语法.很多人都在发知识点和课程大纲, ...

  7. java synchronized块_Java多线程同步代码块Synchronized

    Java多线程同步代码块Synchronized Java中的每个对象都有一个与之关联的内部锁(Intrinsic lock). 这种锁也称为监视器(Monitor), 这种内部锁是一种排他锁,可以保 ...

  8. java 9999 符号_java 9999(示例代码)

    1. map 1.1. map中的方法 1.2. Map.Entry 对于集合来讲,就是把kye-value的数据保存在了Map.Entry的实例之后,再在Map集合中插入了一个Map.Entry的实 ...

  9. java 注册回调_java 实现回调代码实例

    JAVA实现回调 熟悉MS-Windows和X Windows事件驱动设计模式的开发人员,通常是把一个方法的指针传递给事件源,当某一事件发生时来调用这个方法(也称为"回调").Ja ...

最新文章

  1. RH033 Unit 13 Finding and Processing Files
  2. 人体关键点颜色和预处理
  3. 哈哈,我的Blog开通了。。。
  4. win7怎么设置开机密码_win7系统设置电脑密码的方法
  5. CentOS7下让Asp.Net Core的网站自动运行
  6. 远程连接到 SQL Server 2005 时的问题汇集!!
  7. 【音视频数据数据处理 6】【RGB篇】将RGB24图片转为YUV420格式图片
  8. Gradle教程——(二)Gradle介绍
  9. Java P5713 【深基3.例5】洛谷团队系统 洛谷入门题
  10. Excel将数值转换为按指定数字格式表示的文本
  11. 3.3-上位机与下位机通信构架源代码编写与使用方法说明
  12. Xunit.net 单元测试学习——按顺序测试
  13. 负载均衡技术全攻略(大全)
  14. Redhat 7 安装 iftop软件
  15. 40款非常酷的国外创意名片设计欣赏(上)
  16. JavaScript之JS事件机制
  17. 【报告分享】2020中国异常流量报告-秒针系统中欧商业评论(附下载)
  18. STM-32:I2C通信协议—软件I2C读写MPU6050
  19. 测试人即用宝典,全网最全的功能测试点,有这一篇完全足够......
  20. 关闭PyCharm中的波浪线-右下角没有小人头的问题解决

热门文章

  1. mysql主从安装_MySQL主从详细安装步骤
  2. 商务建筑空间场景合成海报
  3. oracle存储过程拆分字符串函数,Oracle中利用存储过程来分割字符串
  4. java之点击一次之后失效_JavaScript 事件绑定只能执行一次了,再次点击就变得无效 ,求助怎么回事...
  5. javascript 无法修改 数组中对象_如何使用JavaScript中的Date对象
  6. 错过就找不到了 Java API文档 免费下载!!!
  7. int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
  8. 总线驱动:Bus driver - USB driver for example
  9. ncurses输出函数:字符+字符串的输出
  10. windows下安装cygwin以及SeismicUnix在cygwin下的安装(windows下安装linux环境,非虚拟机、非双系统)