html5-video标签做视频加密的方法
/*
* 在这里可以进行权限验证等操作
*/
//创建文件对象
File f = new File("E:\\test.mp4");
//获取文件名称
String fileName = f.getName();
//导出文件
String agent = getRequest().getHeader("User-Agent").toUpperCase();
InputStream fis = null;
OutputStream os = null;
try {
fis = new BufferedInputStream(new FileInputStream(f.getPath()));
byte[] buffer;
buffer = new byte[fis.available()];
fis.read(buffer);
getResponse().reset();
//由于火狐和其他浏览器显示名称的方式不相同,需要进行不同的编码处理
if(agent.indexOf("FIREFOX") != -1){//火狐浏览器
getResponse().addHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes("GB2312"),"ISO-8859-1"));
}else{//其他浏览器
getResponse().addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
}
//设置response编码
getResponse().setCharacterEncoding("UTF-8");
getResponse().addHeader("Content-Length", "" + f.length());
//设置输出文件类型
getResponse().setContentType("video/mpeg4");
//获取response输出流
os = getResponse().getOutputStream();
// 输出文件
os.write(buffer);
}catch(Exception e){
System.out.println(e.getMessage());
} finally{
//关闭流
try {
if(fis != null){
fis.close();
}
} catch (IOException e) {
System.out.println(e.getMessage());
} finally{
try {
if(os != null){
os.flush();
}
} catch (IOException e) {
System.out.println(e.getMessage());
} finally{
try {
if(os != null){
os.close();
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
}
文章浏览阅读461次。与现在最流行的SSH相比较,Tapestry能够完全替代其中Struts2和Spring,但是他还是需要一个ORM的框架。IBatis由于比较低的学习曲线,也受到很多人的喜爱。尤其是在IBatis3中引入了许多新的概念和想法,使用更加安全和便利。本文主要介绍如何将Tapestry5.1和IBatis3进行整合。简要步骤:1. 准备工作2. 数据库的建立3. POJO的建立
文章浏览阅读2.2k次。http://www.nginxs.com/linux/57.html最近关注了一下 ffmpeg 发现他又增加了不少模块,这下估计所有的视频格式都支持了吧~所需要一的一些开源包:amrnb-7.0.0.2.tar.bz2 libtheora-1.1.1.tar.bz2amrwb-7.0.0.3.tar.bz2 op_ffpmeg 支持各种格式文件的编译参数
文章浏览阅读190次。How would one do a bulk insert into mySQL if using something likehttps://github.com/felixge/node-mysql解决方案Bulk inserts are possible by using nested array, see the github pageNested arrays are turned i..._node mysql数组对象批量插入
文章浏览阅读137次。 和win7哪个好?win7界面熟悉,操作也熟练又方便。反之win8界面豪华,初次使用有摸不到北的感觉。虽然很多用户都会选择免费的系统,可是win7系统的用户还是占据较大的,那么系统和win7系统哪个好用呢?面对这种情况,小编就告诉大家好还是win7好。 推荐下载:ghost win7 纯净版系统下载 具体区别: 1、Windows 7系统情况 使用Win ..._win7与win8.1哪个系统对电脑负担重
文章浏览阅读2.1k次。 新的漏洞利用程序允许黑客通过将用户发送到虚假登录页面,然后窃取用户名,密码和会话cookie来欺骗双因素身份验证请求。 中国黑客教父,知名网络安全专家,东方联盟创始人郭盛华展示了黑客如何通过漏洞绕过身份验证请求。通过说服受害者访问喜欢的域名并捕获登录名,密码和身份验证码,黑客可以将凭据传递到实际站点并捕获会话cookie。一旦完成,黑客可以无限期地登录。这基本上使用一次性的2FA代码...
文章浏览阅读4.5k次。custom js select * { margin:0;padding:0;border:0 none;font-family:arial,helvetica,sans-serif;} body { padding:10px;} #current,#options { border:1px solid #999;} #replace {cursor:default;over_火狐 下拉框选中整体下移问题
文章浏览阅读1.1w次,点赞5次,收藏14次。vue3+ts使用vue-router跳转vue3路由使用vue3+ts使用vue-router跳转前言一、路由(router)是什么?二、使用步骤1.安装路由2.引入路由3.在main.js中引入router 并挂载4.现在来讲一下如何在页面中使用5.下面是整体页面代码前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、路由(r_ts vue-router
文章浏览阅读1k次。把45拆成A、B、C、D四个数之和,并且A加上2 B减去2 C乘以2 D除以2的结果相等。问A、B、C、D这四个数分别是多少?源程序ex8_1.prg如下: SET TALK OFFCLEACLEA ALLFOR i=1 TO 45 a=i-2 b=i+2 c=INT(i/2) d=i*2 IF a+b+c+d=45 ? a,b,c,d ENDIFENDFORRETU
文章浏览阅读69次。Electric FenceDon PieleIn this problem, `lattice points' in the plane are points with integer coordinates.In order to contain his cows, Farmer John constructs a triangular electric fence by s...
文章浏览阅读497次。【日期】: 2021/6/9【问题】: JS添加的按钮,显示不出来,控制台报错“SCRIPT1006: 缺少 ‘)’”【原因】: IE浏览器不支持(=>)箭头函数 【如何发现】: 根据报错提示找到对应的报错的位置 【如何修复】: 重写方法,不使用剪头函数。function findKey(obj, value, compare = (a, b) => a === b) { return Object.keys(obj).find(k => compar_script1006: 缺少 ')
文章浏览阅读3k次,点赞8次,收藏6次。线程池核心线程、等待队列、非核心线程的创建时机创建入下线程池,核心线程数为2,最大活动线程数为10,缓存队列长度为2。private static ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 10, 1000L, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(2), new ThreadFactory() { @Override_线程池核心线程什么时候创建
文章浏览阅读176次。赶快将模板打了再说!!!!