思路:

上传:<form>表单提交视频-->后台使用字节流保存到本地。
展示:<video>标签展示: src属性发送请求 --> 使用字节流将视频绑定到响应并返回。

这条思路适用于所有文件(包括图片,音频,视频,压缩包),下面只是视频的实例。

一上传

1.form表单提交视频

<form method="post" action="/manager/card/addMovie" enctype="multipart/form-data">
<input name="movie" type="file" MULTIPLE>
<input type="submit">
</form> 注意<input>使用 type="file" MULTIPLE 属性
<form>使用 enctype="multipart/form-data"

2.controller接收

@RequestMapping("/addMovie")
public String addMovie(MultipartFile movie){
..................;
}

3.使用字节流保存到本地

/**
*
* @param file
* @param path 保存的路径
* @param fileName 保存的文件名
*/
public static void saveFile(MultipartFile file, String path, String fileName) { InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = file.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
try {
byte[] bs = new byte[1024]; // 读取到的数据长度
int len; // 输出的文件流保存到本地文件
File tempFile = new File(path); // 保存到临时文件 1K的数据缓冲
if (!tempFile.exists()) {
tempFile.mkdirs();
}
outputStream = new FileOutputStream(tempFile.getPath() + File.separator + fileName); while ((len = inputStream.read(bs)) != -1) { // 开始读取
outputStream.write(bs, 0, len);
} } catch (Exception e) {
e.printStackTrace();
} finally { // 完毕,关闭所有链接
try {
outputStream.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

以上步骤视频就通过程序保存到电脑的指定位置了,一般我会新建一个视频类,先用uuid给视频重命名,视频类的路径是视频的名字,取的时候使用视频的名字去请求。

二 展示

1.video请求

    <video src="${file}/mp4+${mp4.paths}/${mp4.suffix}" controls="controls"
preload="auto">
</video> 注意:video要加controls="controls"才会有播放按钮显示,其他属性不一一介绍

2.使用字节流将视频绑定到响应并返回

@Controller
@RequestMapping("/file")
public class FileController {
/**
*
* @param response
* @param filePath 文件路径+名称
* @param suffix 文件的后缀
* @return
*/
@RequestMapping("/{filePath}/{suffix}")
public String getFile(HttpServletResponse response, @PathVariable String filePath, @PathVariable String suffix) {
FileInputStream fis = null;
ServletOutputStream outputStream = null;
int len = 0;
try {
File file = new File(FileUtils.getFileMainPath() + filePath + "." + suffix);
fis = new FileInputStream(file);
byte[] b = new byte[1024 * 2];
outputStream = response.getOutputStream();
while ((len = fis.read(b)) != -1) {
outputStream.write(b, 0, len);
}
outputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null)
fis.close();
if (outputStream != null)
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
fis = null;
outputStream = null;
}
}
return null;
}

}
等响应返回成功后video标签就显示了视频,

效果如下(我做的手机端的,所以比较小)

web项目中视频的上传和展示的更多相关文章

  1. 关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

  2. 【转】关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

  3. 详细阐述Web开发中的图片上传问题

    Web开发中,图片上传是一种极其常见的功能.但是呢,每次做上传,都花费了不少时间. 一个"小功能"花费我这么多时间,真心不愉快. So,要得认真分析下原因. 1.在最初学习Java ...

  4. ssm项目中常用的上传文件

    在项目中,上传文件一般是必不可少的,所以今天学到新的上传方式,就干脆将学习过的上传方式记录一下 一.表单直接上传图片 表单头要设置 <form action="" metho ...

  5. webuploader项目中多图片上传实例

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. webuploader项目中多文件上传实例

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. 分享一个FileUtil工具类,基本满足web开发中的文件上传,单个文件下载,多个文件下载的需求

    获取该FileUtil工具类具体演示,公众号内回复fileutil20200501即可. package com.example.demo.util; import javax.servlet.htt ...

  8. javaweb项目中的文件上传下载功能的实现

    框架是基于spring+myBatis的. 前台页面的部分代码: <form action="${ctx}/file/upLoadFile.do"method="p ...

  9. JavaWeb项目中使用ajax上传文件

    1.jsp $("#cxsc").click(function(){ var bankId = $("#bankId").val(); var formdata ...

随机推荐

  1. c# 读取对象的[公有属性]的名称,类型,值

    /// <summary> /// 获取某个对象的[公有属性]的名称,类型,值 /// </summary> /// <typeparam name="T&qu ...

  2. lavarel 框架 搜索后分页

    ................框架控制器 public function list(Request $request){ $word=$request->input('word'); $arr ...

  3. laravel7 微信小程序获取openid

    l 通过微信公众号获取appid和appsecret l 在小程序页面中编写代码获取code l 在后端编写方法,换取openid l 添加一个按钮,给按钮一个开放能力 open-type=" ...

  4. Laravel-QueryList-采集

    <?php namespace App\Http\Controllers; use App\Models\NewsModel; use Illuminate\Http\Request; use ...

  5. 微信小程序码生成及canvas绘制

    吐槽:某厂的开发文档写的跟屎一样 1.后台返回accessToken,小程序请求获取小程序码 uni.request({ url: 'https://api.weixin.qq.com/wxa/get ...

  6. Ajax结合THymeleaf使用

    <script type="text/javascript"> //通过$("标签"),也可以使用id的点击事件 $("a"). ...

  7. 华为交换机配置telnet、SSH

    如果网络中有一台或多台网络设备需要远程进行配置和管理,可以通过Telnet远程连接到每一台设备上,对这些网络设备进行集中的管理一维护. 一.AAA认证Telnet服务端 1.配置接口信息 <Hu ...

  8. ArcMap操作随记(2)

    1.空间校正 变换-仿射 仅发生偏移 橡皮页变化 形状改变 变换-投影 旋转,改变角度 变换-相似 改变大小.形状不变 2.计算行列号 Int(([POINT_Y]-1273.143242)/30)+ ...

  9. 单链表上的一系列操作(基于c语言)

    单链表的实现分为两种单链表(其实差别并不是很大):带头结点和不带头结点,分别对应下面图中的上下两种. 链表的每一个结点是由两个域组成:数据域和指针域,分别存放所含数据和下一个结点的地址(这都是很明白的 ...

  10. Kettle错误记录之couldn't open file XXX

    业务背景: 简单的TXT文件入库逻辑 组件: 文件文本输入,表输出 具体BUG: 这里报错是无法打开文件,在我尝试了多个思路后,最终发现了问题所在. 因为使用的txt文件的格式是Unix的,而我的文本 ...