Java图片,视频上传,截取视频帧以及文件下载和视频IO获取
public class FileUtil { @Value("${img.url}") public String imgUrl; @Value("${video.url}") public String videoUrl; /** * 保存图片 * @param files 图片流 * @return */ public String saveImg(MultipartFile[] files) { StringBuilder builder = new StringBuilder(); for (MultipartFile file : files) { //获取文件名称 String fileName = file.getOriginalFilename(); //生成新文件名称 String newFileName = UUID.randomUUID() + fileName.substring(fileName.indexOf(".")); File startUrl = new File(imgUrl); //创建文件夹 if (!startUrl.exists()) { startUrl.mkdirs(); } //生成文件 File fileSave = new File(imgUrl + newFileName); //保存文件 try { file.transferTo(fileSave); builder.append("," + newFileName); } catch (IOException e) { e.printStackTrace(); return "error"; } } return builder.toString(); } /** * 保存视频 * @param file 视频流 * @return */ public String saveVideo(MultipartFile file) { //获取文件名称 String fileName = file.getOriginalFilename(); //生成新文件名称 String newFileName = UUID.randomUUID() + fileName.substring(fileName.indexOf(".")); File startUrl = new File(videoUrl); //创建文件夹 if (!startUrl.exists()) { startUrl.mkdirs(); } //生成文件 File fileSave = new File(videoUrl + newFileName); //保存文件 try { file.transferTo(fileSave); } catch (IOException e) { e.printStackTrace(); return "error"; } return newFileName; } /** * 删除视频 * @param name * @return */ public void deletFile(String name) { File file = new File(videoUrl + name); if (file.exists()) { file.delete(); } } /** * 删除图片 * @param name * @return */ public void deletFiles(String name) { File file = new File(imgUrl + name); if (file.exists()) { file.delete(); } } /** * 截取视频的帧,形成视频的预览图片 * * @param videoName 视频名 */ public String cutPhotoFromVedio(String videoName) { FFmpegFrameGrabber ff = null; String videoPath = videoUrl + videoName; String imgPath = videoUrl + videoName.substring(0, videoName.lastIndexOf(".")) + ".jpg"; String newImgName = videoName.substring(0, videoName.lastIndexOf(".")) + ".jpg"; File targetFile = new File(imgPath); try { ff = new FFmpegFrameGrabber(videoPath); ff.start(); int lenght = ff.getLengthInFrames(); int i = 0; Frame f = null; while (i < lenght) { // 过滤前5帧,避免出现全黑的图片,依自己情况而定 f = ff.grabFrame(); if ((i > 5) && (f.image != null)) { break; } i++; } opencv_core.IplImage img = f.image; int owidth = img.width(); int oheight = img.height(); // 对截取的帧进行等比例缩放 int width = 800; int height = (int) (((double) width / owidth) * oheight); BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); bi.getGraphics().drawImage(f.image.getBufferedImage().getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null); ImageIO.write(bi, "jpg", targetFile); } catch (Exception e) { e.printStackTrace(); } finally { try { if (ff != null) { ff.stop(); } } catch (FrameGrabber.Exception e) { e.printStackTrace(); } } return newImgName; }}
/** * 文件下载
* fileName 文件名称
*/
public Response download(HttpServletResponse response, String fileName) { if (fileName != null) { File file = new File(filePath, fileName); if (file.exists()) { response.reset(); response.setContentType("application/octet-stream; charset=utf-8"); try { response.setHeader("Content-Disposition", "attachment;" + "filename=" + new String(fileName.getBytes("UTF8"), "ISO8859-1")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } byte[] b = new byte[1024]; FileInputStream fis = null; BufferedInputStream bis = null; try { fis = new FileInputStream(file); bis = new BufferedInputStream(fis); OutputStream os = response.getOutputStream(); int i = bis.read(b); while (i != -1) { os.write(b, 0, i); i = bis.read(b); } return new Response().success("文件下载成功!"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } } return new Response().success();}
/** * IO读取视频或图片
* videoName 文件名称
*/
public void getVideo(String videoName, HttpServletResponse response) throws IOException { response.setContentType("images/*;charset=UTF-8"); ServletOutputStream out = null; FileInputStream ips = null; String filePath = videoUrl + videoName; try { File file = new File(filePath); if (file.exists()) { ips = new FileInputStream(new File(filePath)); out = response.getOutputStream(); int len = 0; byte[] buffer = new byte[1024 * 10]; while ((len = ips.read(buffer)) != -1) { out.write(buffer, 0, len); } } } catch (Exception e) { e.printStackTrace(); } finally { if (!StringUtils.isEmpty(out)) { out.flush(); out.close(); ips.close(); } }}
转载于:https://www.cnblogs.com/zhengbai/p/9969409.html
Java图片,视频上传,截取视频帧以及文件下载和视频IO获取相关推荐
- java 图片服务器 上传_Java实现把图片上传到图片服务器(nginx+vsftp)
前言: 在我另一篇笔记中已经记载了如何用nginx + vsftp搭建图片服务器(请参考nginx + vsftp搭建图片服务器),并且用vsftp的客户端工具filezilla测试过已经可用.但是在 ...
- 如何将视频上传到网站服务器,如何将本地视频上传到云服务器
如何将本地视频上传到云服务器 内容精选 换一换 在本地主机和Windows云服务器上分别安装QQ.exe等工具进行数据传输.使用远程桌面连接mstsc方式进行数据传输.该方式不支持断点续传,可能存在传 ...
- java图片如何上传_Java如何将图片上传到服务器
Java如何将图片上传到服务器 发布时间:2020-11-10 17:28:18 来源:亿速云 阅读:96 作者:Leah 这篇文章将为大家详细讲解有关Java如何将图片上传到服务器,文章内容质量较高 ...
- java 图片分段上传_java文件分片上传,断点续传
文件夹数据库处理逻辑 publicclassDbFolder { JSONObject root; publicDbFolder() { this.root =newJSONObject(); thi ...
- java 图片服务器 上传_Java向服务器上传图片
在比较绚丽多彩的网站或者业务逻辑比较丰富的程序设计过程中,图片的相关操作时必不少的,尤其时图片的上传.还没有彻底摆脱纸质办公可能需要将纸质的文件备份上传,网站的建设可能需要上传用户头像.图片描述等等, ...
- JAVA图片裁剪上传实例______软件开发-帮助类
实现思路 使用jcrop插件手机要裁剪图片的坐标 将收集到的参数传递到后台,在后台使用java图形对象绘制图像进行裁剪 后台处理流程: 1.将上传的图片按按照比例进行压缩后上传到文件服务器,并且将 ...
- java 图片批量上传_SpringBoot 2.0 图片上传(支持批量上传)
SpringBoot 2.0提供了很多开箱即用的功能,这使得我们开发也更加的简单. 下面是一个图片上传的Demo(包含前端代码与后端的代码) Web端代码,支持批量上传 File upload upl ...
- java 图片批量上传_java实现批量上传图片,还要保证每个图片的顺序号,疑问求教!...
rt 我要一次性同时上传n张照片,并且每张照片的顺序号还不一样,第一张的serialno是1,第二张是2.. 一开始我做单张图片上传, 代码如下 @RequestMapping("/picU ...
- java 图片分段上传_java 分段读取文件 并通过HTTP上传
1.首先将文件分段,用RandomAccessFile 2.分段后将分出的内容上传到http 1.[代码][Java]代码 URL url = new URL(actionUrl); HttpURLC ...
- java 图片分段上传_java实现分段读取文件并通过HTTP上传的方法
本文实例讲述了java实现分段读取文件并通过HTTP上传的方法.分享给大家供大家参考.具体如下: 1.首先将文件分段,用RandomAccessFile 2.分段后将分出的内容上传到http URL ...
最新文章
- 三个可能会被计算机视觉技术改变的行业
- vue 加载页面时触发时间_解析Vue项目的四个方面优化
- java-1.11.0的环境配置,JAVA 环境配置
- python编程入门电子书下载-Python编程基础如何快速入门?“附电子书下载”
- 收集下阿里集团下的技术BLOG
- 关键字explicit与构造函数
- 【Blog.Core开源】将Program升级为.NET6.0版本
- linux删除mysql临时文件_linux下mysql自动备份数据库与自动删除临时文件_MySQL
- java 打包边下载_JAVA实现边下载边压缩
- 【redis3在linux安装与基本操作】
- 方阵和的行列式、方阵行列式的和
- Swift - 项目部署配置(支持的系统,设备和状态条样式等)
- 有效管理云计算成本的多个措施
- mysql表结构及索引脚本
- BiLSTM-CRF模型理解
- 周志华:关于机器学习的一点思考
- 雷电模拟器连接Android,1.AS连接雷电模拟器
- Java学习:Java程序员必读的经典书籍没有之一,你读过几本?
- Day002-2021-07-30 String常用API
- 关于使用sdkmanager命令报错(环境:Mac+Android SDK)
热门文章
- biztalk中的发送端口产生异常及处理(下)
- python程序设计 清华大学出版社 pdf下载-清华大学出版社-图书详情-《Python 程序设计》...
- python下载文件到指定文件夹-python实现指定文件夹下的指定文件移动到指定位置...
- 不是程序员学python有什么用-程序员的基本功:为什么非要用Python,其他语言不好吗?...
- 从零开始学习python-从零开始学习python(一)
- python程序员需要掌握哪些技术-程序员Python编程必备5大工具,你用过几个?
- php7和python3性能对比-Python 2.7与Python 3.7区别
- python基础实例-Python入门基础知识实例,
- python编程100例头条-python爬虫演示:以爬取今日头条为例
- 用python画烟花-python实现浪漫的烟花秀