web项目中视频的上传和展示

思路:

上传:<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标签就显示了视频,

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏极客编程

用go语言创建区块链

本文你将用Go语言创建自己的区块链、理解哈希函数是如何保持区块链的完整性、掌握如何创造并添加新的块、实现多个节点通过竞争生成块、通过浏览器来查看整个链、了解所有...

1122
来自专栏守望轩

让GridView中CheckBox列支持FireFox

在Asp.net中,可以通过模板列,在Gridview中实现CheckBox列的实现,相关的代码并不复杂,你可以参考这里,我抽取的部分代码如下: <script...

2088
来自专栏葡萄城控件技术团队

如何把Excel中的单元格等对象保存成图片

对于Excel中的很多对象,比如单元格(Cell),图形(shape),图表(chart)等等,有时需要将它们保存成一张图片。就像截图一样。 最近做一个Exc...

18910
来自专栏ThoughtWorks

秒懂ReactJS | TW洞见

今日洞见 文章作者/配图来自ThoughtWorks:贾朝阳。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网...

37110
来自专栏NetCore

[原创]Fluent NHibernate之旅二--Entity Mapping

接着上一篇,今天我们说说ORM中的Mapping。如果你要体验NHibernate的强大,首先你就要学会配置,包括SessionFactory和Mapping的...

2399
来自专栏Java帮帮-微信公众号-技术文章全总结

Java设计模式-责任链模式

责任链模式: 将能够处理某一类请求的对象串成一条链, 请求沿链传递, 链上的对象逐个判断是否有能力处理该请求. 使多个对象都有机会处理请求, 从而避免请求发送者...

4149
来自专栏工作积累

Android获取QQ和微信的聊天记录,并保存到数据库

(该方法只适用于监控自己拥有的微信或者QQ ,无法监控或者盗取其他人的聊天记录。本文只写了如何获取聊天记录,服务器落地程序并不复杂,不做赘述。写的仓促,有错别字...

5K14
来自专栏歪先生_自留地

Python test2

1113
来自专栏京东技术

Kotlin京东业务实战 | 强大又简洁的JVM语言

9年以上开发经验,熟悉主流移动开发框架,热衷于探索新技术,曾负责过店铺、JDReact架构等项目的开发工作,目前专注于京东App领券中心频道开发,以及移动端技术...

1580
来自专栏NetCore

打造属于自己的支持版本迭代的Asp.Net Web Api Route

    在目前的主流架构中,我们越来越多的看到web Api的存在,小巧,灵活,基于Http协议,使它在越来越多的微服务项目或者移动项目充当很好的service...

23510

扫码关注云+社区

领取腾讯云代金券