Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java视频上传与播放功能

java视频上传与播放功能

作者头像
全栈程序员站长
发布于 2022-09-08 07:16:46
发布于 2022-09-08 07:16:46
3.2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

参考:https//wenku.baidu.com/view/63fb1da364ce0508763231126edb6f1aff0071c7.html

此次上传播放功能采用eclipse+ssm+maven +spring2.5+tomcat8+jdk8

这个功能是有一定缺陷的,CKplayer播放视频需要H264 MP4格式的,所以需要格式转化,网盘上都有。

需要源码的百度网盘地址:

链接: https://pan.baidu.com/s/1GXA_VZVmZFyRxLqZZwrY0A

提取码: 16sq

2020年1月3日:今天重新做了一版idea+springboot+ftp(在我自己的服务器上的ftp)的文件上传和播放,如果没有FTP文件服务器,这个不行;

写的非常简单,给你们连接地址:

链接:https://pan.baidu.com/s/1NVLxa0yQ4_Txr72jxVv0Ug 提取码:mm6k

FileEntity:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    private long fileId;

    /*****
     * 原文件名
     ***/
    
    private String titleOrig;

    /*****
     * 修改后文件名
     ***/
    
    private String titleAlter;

    /*****
     * 文件大小
     ***/
    
    private String size;

    /*****
     * 文件类型
     ***/
    
    private String type;

    /*****
     * 文件保存路径
     ***/
    
    private String path;

    /*****
     * 文件上传时间
     ***/
    
    private Timestamp uploadTime;

控制层:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping(value = "/upload")
@ResponseBody
public ModelAndView upload(@RequestParam(value = "file", required = false) MultipartFile multipartFile,
HttpServletRequest request, ModelMap map) {
String message = "";
FileEntity entity = new FileEntity();
String logoPathDir=request.getParameter("shipin");
System.out.println("-------"+logoPathDir+"----------------------------------");
FileUploadTool fileUploadTool = new FileUploadTool();
try {
entity = fileUploadTool.createFile(logoPathDir,multipartFile, request);
if (entity != null) {
service.saveFile(entity);
message = "上传成功";
map.put("entity", entity);
map.put("result", message);
} else {
message = "上传失败";
map.put("result", message);
}


} catch (Exception e) {
e.printStackTrace();
}
return new ModelAndView("/pages/views/result", map);
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping(value = "/{id}/play")
@ResponseBody
public ModelAndView playVideo(@PathVariable("id") long id, ModelMap model) {


// CharterDto charterDto_ = charterFacade.getCharterById(id);
FileEntity entity = service.findByid(id);
model.put("entity", entity.getPath());
ModelAndView view = new ModelAndView("index", model);
return view;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping("/show")
@ResponseBody
public ModelAndView showList(HttpServletRequest request, ModelMap map) {
// 获取上传文件目录
String logoPathDir = "/video/";
String uploadFilePath =request.getSession().getServletContext().getRealPath(logoPathDir);
// 存储要下载的文件名
List<String> fileNameMap = new ArrayList<String>();
this.listFile(new File(uploadFilePath), fileNameMap);
map.put("list", fileNameMap);
return new ModelAndView("listFile", map);


}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
* @Description: 递归遍历指定目录下的所有文件
* @param file:即代表一个文件,也代表一个文件目录
* @param map:存储文件名的Map集合
*/
public void listFile(File file, List<String> map) {
// 如果file代表的不是一个文件,而是一个目录
if (!file.isFile()) {
// 列出该目录下的所有文件和目录
File files[] = file.listFiles();
// 遍历files[]数组
for (File f : files) {
// 递归
listFile(f, map);
}
} else {
map.add(file.getName());
}
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping(value = "/download")//下载
@ResponseBody
public void download(@RequestParam(value = "filename", required = false) String fileName,
HttpServletRequest request, ModelMap map, HttpServletResponse response) {
try {
fileName = new String(fileName.getBytes("iso8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
// 获取上传文件目录
String logoPathDir = "/video/";
String fileSaveRootPath = request.getSession().getServletContext().getRealPath(logoPathDir);
// 文件路径
String fileDir = fileSaveRootPath + File.separator + fileName;
File file = new File(fileDir);
if (!file.exists()) {
System.out.println("下载的文件不存在");
return;
}
// 设置响应头,控制浏览器下载该文件
try {
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 读取要下载的文件,保存到文件输入流
FileInputStream in = null;
try {
in = new FileInputStream(fileDir);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 创建输出流
OutputStream out;
try {
out = response.getOutputStream();
// 创建缓冲区
byte buffer[] = new byte[1024];
int len = 0;
// 循环将输入流中的内容读取到缓冲区当中
while ((len = in.read(buffer)) > 0) {
// 输出缓冲区的内容到浏览器,实现文件下载
out.write(buffer, 0, len);
}
// 关闭文件输入流
in.close();
// 关闭输出流
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



}

工具类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.util;


import java.io.File;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Random;


import javax.servlet.http.HttpServletRequest;


import org.springframework.web.multipart.MultipartFile;


import com.model.sj.FileEntity;
//文件上传工具
public class FileUploadTool {


// 文件最大500M
private static long upload_maxsize = 5000 * 1024 * 1024;
// 文件允许格式
private static String[] allowFiles = { ".rar", ".doc", ".docx", ".zip", ".pdf", ".txt", ".swf", ".xlsx", ".gif",
".png", ".jpg", ".jpeg", ".bmp", ".xls", ".mp4", ".flv", ".ppt", ".avi", ".mpg", ".wmv", ".3gp", ".mov",
".asf", ".asx", ".vob", ".wmv9", ".rm", ".rmvb" };
// 允许转码的视频格式(ffmpeg)
private static String[] allowFLV = { ".avi", ".mpg", ".wmv", ".3gp", ".mov", ".asf", ".asx", ".vob" };
// 允许的视频转码格式(mencoder)
private static String[] allowAVI = { ".wmv9", ".rm", ".rmvb" };


public FileEntity createFile(String logoPathDir,MultipartFile multipartFile, HttpServletRequest request) {
FileEntity entity = new FileEntity();
boolean bflag = false;
String fileName = multipartFile.getOriginalFilename().toString();
System.out.println("文件全称:"+fileName+"~~~~~~~~~~~~~~");
// 判断文件不为空
if (multipartFile.getSize() != 0 && !multipartFile.isEmpty()) {
bflag = true;
// 判断文件大小
if (multipartFile.getSize() <= upload_maxsize) {
bflag = true;
// 文件类型判断
if (this.checkFileType(fileName)) {
bflag = true;
} else {
bflag = false;
System.out.println("文件类型不允许");
}
} else {
bflag = false;
System.out.println("文件大小超范围");
}
} else {
bflag = false;
System.out.println("文件为空");
}
if (bflag) {
//String logoPathDir = "/video/";
String logoRealPathDir = request.getSession().getServletContext().getRealPath(logoPathDir);
System.out.println("全路径不加项目名:"+logoRealPathDir+"*************************");
// 上传到本地磁盘
// String logoRealPathDir = "E:/upload";
File logoSaveFile = new File(logoRealPathDir);
if (!logoSaveFile.exists()) {
logoSaveFile.mkdirs();
}
String name = fileName.substring(0, fileName.lastIndexOf("."));
System.out.println("文件名称:" + name);
// 新的文件名
String newFileName = this.getName(name);
// 文件扩展名
String fileEnd = this.getFileExt(fileName);
// 绝对路径
String fileNamedirs = logoRealPathDir + File.separator + newFileName + fileEnd;
System.out.println("这是啥:fileEnd:"+fileEnd);
System.out.println("这是啥:File.separator:"+File.separator);
System.out.println("保存的绝对路径:" + fileNamedirs);
File filedirs = new File(fileNamedirs);
// 转入文件
try {
multipartFile.transferTo(filedirs);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 相对路径
entity.setType(fileEnd);
String fileDir = logoPathDir + newFileName + fileEnd;
StringBuilder builder = new StringBuilder(fileDir);
String finalFileDir = builder.substring(1);
// size存储为String
String size = this.getSize(filedirs);
// 源文件保存路径
String aviPath = filedirs.getAbsolutePath();
if (aviPath!=null) {

entity.setSize(size);
entity.setPath(finalFileDir);
entity.setTitleOrig(name);
entity.setTitleAlter(newFileName); 
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
entity.setUploadTime(timestamp);
return entity;
} 
} else {
return null;
}
return entity;


}


/**
* 文件类型判断
*
* @param fileName
* @return
*/
private boolean checkFileType(String fileName) {
Iterator<String> type = Arrays.asList(allowFiles).iterator();
while (type.hasNext()) {
String ext = type.next();
if (fileName.toLowerCase().endsWith(ext)) {
return true;
}
}


return false;
}


/**
* 视频类型判断(flv)
*
* @param fileName
* @return
*/
private boolean checkMediaType(String fileEnd) {
Iterator<String> type = Arrays.asList(allowFLV).iterator();
while (type.hasNext()) {
String ext = type.next();
if (fileEnd.equals(ext)) {
return true;
}
}
return false;
}


/**
* 视频类型判断(AVI)
*
* @param fileName
* @return
*/
private boolean checkAVIType(String fileEnd) {
Iterator<String> type = Arrays.asList(allowAVI).iterator();
while (type.hasNext()) {
String ext = type.next();
if (fileEnd.equals(ext)) {
return true;
}
}
return false;
}


/**
* 获取文件扩展名
*
* @return string
*/
private String getFileExt(String fileName) {
return fileName.substring(fileName.lastIndexOf("."));
}


/**
* 依据原始文件名生成新文件名
* UUID:全局唯一标识符,由一个十六位的数字组成,由三部分组成:当前日期和时间、时钟序列、全局唯一的IEEE机器识别号
* @return string
*/
private String getName(String fileName) {
Random random = new Random();
return "" + random.nextInt(10000) + System.currentTimeMillis();
//return UUID.randomUUID().toString() + "_" + fileName;


}


/**
* 文件大小,返回kb.mb
* 
* @return
*/
private String getSize(File file) {
String size = "";
long fileLength = file.length();
DecimalFormat df = new DecimalFormat("#.00");
if (fileLength < 1024) {
size = df.format((double) fileLength) + "BT";
} else if (fileLength < 1048576) {
size = df.format((double) fileLength / 1024) + "KB";
} else if (fileLength < 1073741824) {
size = df.format((double) fileLength / 1048576) + "MB";
} else {
size = df.format((double) fileLength / 1073741824) + "GB";
}


return size;


}


}

JSP上传页面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form class="form-horizontal" id="upload" method="post" action="${contextPath}/file/upload" enctype="multipart/form-data">
            <div class="form-group" align="center">
                <div class="col-md-4 col-sm-4  col-xs-4 col-lg-4">
                   文件上传: <input type="file" class="form-control" name="file" id="file">
                   上传地址:<select name="shipin">
                    <option value="/video/">video视频文件</option>
                    <option value="/file/">file表格文件</option>
                    <option value="/image/">image照片</option>
                   </select>
                <br>
                   <input type="submit" value="上传">
                </div>
            </div>

          </form>

JSP显示页面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传视频结果</title>
</head>
<body>
<div class="panel panel-default">
<div class="panel-body" align="center">
<div class="panel-heading">
<h1 class="sub-header h3">上传结果</h1>
</div>


<div class="row-fluid">${result}</div>
<hr>
<div class="row-fluid">
<div class="col-lg-12">
<div class="table-responsive">


<table class="table table-hover">
<thead>
<tr>
<th>文件名称</th>
<th>文件大小</th>
<th>文件类型</th>
<th>文件路径</th>
<th>上传时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>${entity.titleOrig}</td>
<td>${entity.size}</td>
<td>${entity.type}</td>
<td>${entity.path}</td>
<td>${entity.uploadTime}</td>
<td><button onclick="play()">播放</button></td> 
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="a1" align="center"></div>
</div>
</div>
</body>
<script type="text/javascript" src="../ckplayer/ckplayer.js" charset="utf-8"></script>
<script type="text/javascript">
function play(){
var flashvars = {
f : '${contextPath}/${entity.path}', //项目的相对路径WebContent下
c : 0,
s : 0,
p : 1,
code:'gbk2312'
};
/* var params={bgcolor:'#FFF',allowFullScreen:true,allowScriptAccess:'always',wmode:'transparent'};
alert(params);
    CKobject.embedSWF('../ckplayer/ckplayer.swf','a1','ckplayer_a1','600','400',flashvars,params);  */
var video=['${contextPath}/${entity.path}->video/mp4'];
alert(video);
CKobject.embed('../ckplayer/ckplayer.swf', 'a1', 'ckplayer_a1',
'600', '400', false, flashvars, video);
}
</script>

</html>

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/156373.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaHTTP下载视频
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116854.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/06
1.5K0
Get几个非常实用技能——常用文件操作工具类、图片视频操作
工具类中的方法 1. toFile:MultipartFile转File 参数:MultipartFile multipartFile 2. getExtensionName:获取文件扩展名,不带 . 参数:String filename 3. getFileNameNoEx:Java文件操作 获取不带扩展名的文件名 参数:String filename 4. getSize:文件大小转换 参数:long size 5. inputStreamToFile:inputStream 转 File 参数:InputStream ins, String name 6. upload:将文件名解析成文件的上传路径 MultipartFile file, String filePath 7. downloadExcel:导出excel 参数:List<Map<String, Object>> list, HttpServletResponse response 8. getFileType:获取文件类型 参数:String type 9. getTransferFileType:获取文件类型英文名 参数:String type 10. checkSize:检测文件是否超出允许范围 参数:long maxSize, long size 11. check:判断两个文件是否相同 参数:File file1, File file2 12. getByte:获取文件字节长度 参数:File file 13. getMd5:将字节数组转换为16进制字符 参数:byte[] bytes 14. downloadFile:下载文件 参数:HttpServletRequest request, HttpServletResponse response, File file, boolean deleteOnExit
不愿意做鱼的小鲸鱼
2022/09/26
1K0
Get几个非常实用技能——常用文件操作工具类、图片视频操作
基于Servlet的3.1以上注解方式完成上传功能。
注意:这里采用的是servlet的注解方式,即要求在Servlet3.1版本以上。另,Tomcat7.0版本以上
杨校
2019/07/01
4000
基于Servlet的3.1以上注解方式完成上传功能。
Java微信公众平台开发_06_素材管理
一、本节要点 1.官方文档的media  这个media可以理解为文件,即我们需要以POST方式提交一个文件 2.媒体文件有效期 媒体文件在微信后台保存时间为3天,即3天后media_id失效。 二、
shirayner
2018/08/10
1.9K0
Java微信公众平台开发_06_素材管理
(13)SpringBoot使用poi上传excel文件
   摘要:本文主要讲解,在SpringBoot项目中如何使用poi上传excel文件。
IT云清
2022/05/07
2.2K0
SpringBoot实现文件上传功能详解
自动配置是SpringBoot为我们提供的便利之一,开发者可以在不作任何配置的情况下,使用SpringBoot提供的默认设置,如处理文件需要的MultipartResolver。
huofo
2022/03/18
2.7K0
SpringBoot实现文件上传功能详解
SpringMVC上传下载
1、需要导入jar包:ant.jar、commons-fileupload.jar、connom-io.jar。当然spring jar包不可缺少的哦  我这里用的是spring+springmvc+hibernate  可以到官网上直接下载springmvcjar即可
用户7705674
2021/09/23
5040
[SpingBoot guides系列翻译]文件上传
mkdir -p src/main/java/hello,其实也就是在IntelliJ里面新建一个空的Java项目,然后添加一个main.java.hellopackage。
_淡定_
2019/05/15
10.6K0
[SpingBoot guides系列翻译]文件上传
Spring学习笔记(二十二)——实现图片上传功能(layui)
注意:springboot项目启动编译后,会生成一个target的编译文件,图片必须放在该文件夹下面才能被动态映射。否则只能使用file:///E:/xxx.jpg映射本地的路径而无法实现动态映射,也可以另外部署一个映射的文件夹专门用来实现映射图片。
不愿意做鱼的小鲸鱼
2022/09/26
7010
Spring学习笔记(二十二)——实现图片上传功能(layui)
Spring Boot 与 Kotlin 上传文件
如果我们做一个小型的web站,而且刚好选择的kotlin 和Spring Boot技术栈,那么上传文件的必不可少了,当然,如果你做一个中大型的web站,那建议你使用云存储,能省不少事情。
全科
2018/08/15
1K0
Java微信公众平台开发_03_消息管理之被动回复消息
上一节,我们启用服务器配置的时候,填写了一个服务器地址(url),如下图,这个url就是回调url,是开发者用来接收微信消息和事件的接口URL 。也就是说,用户在微信公众号中发送的消息会被推送到这个回调url,而我们可以接收用户的消息,并进行回复。
shirayner
2018/08/10
5.5K0
Java微信公众平台开发_03_消息管理之被动回复消息
Java通过Poi的开发Excel导入导出和下载功能
最近有用到Excel的下载、导入、导出功能。提供一个Excel模板给用户下载,用户根据规范填写模板然后再导入Excel数据,保存到数据库,也可导出类表数据为Excel。因为有时候页面添加功太麻烦,就做成这样的Excel批量导入。
sunonzj
2022/06/21
2.9K0
Java通过Poi的开发Excel导入导出和下载功能
maven工程 java 实现文件上传 SSM ajax异步请求上传
<input type="file" class="fileupon33" name="fileupmulti" accept="image/jpeg,image/png" onchange="mutiFiles(this)" multiple/>
Krry
2018/09/10
2.6K0
SpringMVC上传文件的 4 种方式,你都会么?| SpringMVC第6篇
springmvc 系列中的测试案例,基本上都是使用 idea 中的 http client 插件开发的,是一款非常高效的接口测试工具,还没有用过的,建议先去了解下用法:idea 中的接口测试利器(http cient 插件)
路人甲Java
2021/06/25
3.5K0
SpringMVC上传文件的 4 种方式,你都会么?| SpringMVC第6篇
jquery上传图片并回显
在工作中,有时候我们会遇到这样的情况:上传图片并回显。 先来看看代码怎么写。然后咱们在讨论,这个案例中使用到的技术。 页面是用的是thymeleaf开发的。 说明:页面中必须引入query 上传的div: <div class="form-group">       <label class="col-sm-3 control-label">图片:</label>     <div class="col-sm-8" >         <input type="hidden" name="name"  id
凯哥Java
2022/12/16
4.6K0
jquery上传图片并回显
ElementUI+springboot上传文件
ElementUI+springboot上传文件 配置上传路径 image.properties image.localDirPath=/Volumes/mac/Program/PageImg/ 实现 @PropertySource("classpath:/image.properties") public class FileServiceImpl implements FileService { @Value("${image.localDirPath}") private Strin
许喜朝
2020/11/06
1.2K0
Java 文件上传 MultipartFile
defaultEncoding=”UTF-8″ 是请求的编码格式,默认为iso-8859-1 maxUploadSize=”5400000″ 是上传文件的大小,单位为字节 uploadTempDir=”fileUpload/temp” 为上传文件的临时路径
全栈程序员站长
2022/08/27
4.5K0
Java 文件上传 MultipartFile
Spring MVC更多家族成员----文件上传---06
在深入讲述Spring MVC框架之前,我们先暂时跳出对框架内主要角色的认知范围,再次“鸟瞰”Spring MVC框架总体上的逻辑结构。
大忽悠爱学习
2022/08/23
9360
Spring MVC更多家族成员----文件上传---06
使用腾讯云知识引擎接入满血DeepSeek-R1打造您专属的个人知识库
最近的DeepSeek好火,它是由杭州深度求索人工智能基础技术研究有限公司出品的一款先进的人工智能产品。DeepSeek以其强大的技术实力和创新应用,迅速在人工智能领域崭露头角,成为行业关注的焦点。
半月无霜
2025/03/06
2260
基于springboot架构的读取excel 图片并自动上传
六月的雨在Tencent
2024/03/28
2560
基于springboot架构的读取excel 图片并自动上传
推荐阅读
相关推荐
JavaHTTP下载视频
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验