Java中如何实现实现文件资料上传并生成缩略图
发表于:2025-11-20 作者:千家信息网编辑
千家信息网最后更新 2025年11月20日,这篇文章主要介绍Java中如何实现实现文件资料上传并生成缩略图,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一:需求用户有一个需求就是收藏的功能,单纯的收藏记录好做,但是想加点
千家信息网最后更新 2025年11月20日Java中如何实现实现文件资料上传并生成缩略图
这篇文章主要介绍Java中如何实现实现文件资料上传并生成缩略图,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
一:需求
用户有一个需求就是收藏的功能,单纯的收藏记录好做,但是想加点难度就是,生成缩略图。类似B站的收藏一样。
二:如何实现需求,以及其中遇到的问题?
需求分析时遇到的问题
1.如何生成缩略图?
2.收藏的时候生成缩略图还是文件上传的时候生成缩略图?
3.生成的缩略图存在哪里?
编码过程中遇到的问题
1.文件截取比较慢,如何解决?
方法:使用多线程
2.通过new File()无法获取网络文件?
File file = new File("http://d-godone.dmsd.tech/goDone/M00/00/0A/wKg8O2D2mnqEMg7wAAAAALbl5Ys275.pdf");
方法:使用工具类FileUtils.copyURLToFile(url,file)
3.文件上传需要MultipartFile类型,但是截取出来的类型为Frame和BufferedImage,怎么弄?
方法:查阅资料封装出,文件转换的方法。
三:流程图与UML图


四:上传文件资料生成缩略图
1.上传图片生成缩略图--FastDFS
/** * @Author: Promsing(张有博) * @Date: 2021/9/18 - 0:25 * @Description: 图片的处理类 * @version: 1.0 */@Slf4j@Componentpublic class ImageProcessing extends TypeProcessing{ @Autowired private FastFileStorageClient fastFileStorageClient; @Autowired private ThumbImageConfig thumbImageConfig; private String group="http://192.168.y.y:8888/group1/"; /** * * @param fileName 本地文件的位置 * @return */ @Override public String fileUpload(String fileName) { File file = new File(fileName); // 上传并且生成缩略图 StorePath storePath = null; try { storePath = this.fastFileStorageClient.uploadImageAndCrtThumbImage( new FileInputStream(file), file.length(), "png", null); } catch (FileNotFoundException e) { e.printStackTrace(); } //String path = thumbImageConfig.getThumbImagePath(storePath.getPath()); String imageUrl=group+thumbImageConfig.getThumbImagePath(storePath.getPath()); return imageUrl; }}2.上传视频生成缩略图--javacv
/** * @Author: Promsing(张有博) * @Date: 2021/9/18 - 0:37 * @Description: 视频的处理类 * @version: 1.0 */@Component@Slf4jpublic class VideoProcessing extends TypeProcessing { @Override public String fileUpload(String videoFileName) { //最后获取到的视频的图片的路径 String videPicture=""; //Frame对象 Frame frame = null; //标识 int flag = 0; try { /* 获取视频文件 */ // FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber(videoPath + "/" + videoFileName); FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber( videoFileName); fFmpegFrameGrabber.start(); //获取视频总帧数 int ftp = fFmpegFrameGrabber.getLengthInFrames(); log.info("时长 " + ftp / fFmpegFrameGrabber.getFrameRate() / 60); while (flag <= ftp) { frame = fFmpegFrameGrabber.grabImage(); /* 对视频的第五帧进行处理 */ if (frame != null && flag==5) { // //文件转换 BufferedImage bufferedImage =FileCaseUtil.FrameToBufferedImage(frame); MultipartFile multipartFile =FileCaseUtil. fileCase(bufferedImage); log.info("开始文件上传:"); //文件上传 String fileLoad = FileUploadUtil.fileLoad(multipartFile); videPicture=fileLoad; log.info("文件上传成功{}",fileLoad); break; } flag++; } fFmpegFrameGrabber.stop(); fFmpegFrameGrabber.close(); } catch (Exception E) { E.printStackTrace(); } return videPicture; } }3.上传PDF生成缩略图--pdfbox
/** * @Author: Promsing(张有博) * @Date: 2021/9/18 - 0:29 * @Description: PDF的处理类 * @version: 1.0 */@Slf4j@Componentpublic class PDFProcessing extends TypeProcessing{ @Override public String fileUpload(String fileName) { String pdfUrl=""; try { //将读取URL生成File File file = FileCaseUtil. URLToFile(fileName); // 打开来源 使用pdfbox中的方法 PDDocument pdfDocument = PDDocument.load(file); PDFRenderer pdfRenderer = new PDFRenderer(pdfDocument); // 提取的页码 int pageNumber = 0; // 以300 dpi 读取存入 BufferedImage 对象 int dpi = 300; BufferedImage buffImage = pdfRenderer.renderImageWithDPI(pageNumber, dpi, ImageType.RGB); // 将 BufferedImage 写入到 png // ImageIOUtil.writeImage(buffImage, "c:/temp/xx.png", dpi); //这里使用文件BufferedImage上传 // 文件上传 MultipartFile multipartFile =FileCaseUtil. fileCase(buffImage); log.info("PDF开始上传:"); pdfUrl=FileUploadUtil. fileLoad(multipartFile); log.info("PDF上传成功:{}",pdfUrl); // //文件储存对象// File outPut = new File("C:\\Users\\Administrator\\Videos\\"+ UUID.randomUUID().toString()+".jpg");// // ImageIO.write(FrameToBufferedImage(frame), "jpg", outPut);// ImageIO.write(buffImage, "jpg",outPut); // 关闭文档 pdfDocument.close(); //注意关闭文档与删除文档的顺序 //删除临时的file String s = FileCaseUtil.threadLocal.get(); System.out.println(s); File f=new File(s); boolean delete = f.delete(); System.out.println("文件的删除状态"+delete); } catch (InvalidPasswordException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return pdfUrl; }}4.封装好的方法
public static File URLToFile(String url){ log.info("读取FastDFS上的ppt"); File file1 = new File("test.pdf"); try { URL url1 = new URL(url); FileUtils.copyURLToFile(url1,file1); } catch (IOException e) { e.printStackTrace(); } File absoluteFile = file1.getAbsoluteFile(); threadLocal.set(absoluteFile.toString()); log.info("ppt已经存储到本地"+absoluteFile.toString()); return file1; } public static BufferedImage FrameToBufferedImage(Frame frame) { //创建BufferedImage对象 Java2DFrameConverter converter = new Java2DFrameConverter(); BufferedImage bufferedImage = converter.getBufferedImage(frame); return bufferedImage; } public static MultipartFile fileCase(BufferedImage image){ //得到BufferedImage对象 // BufferedImage bufferedImage = JoinTwoImage.testEncode(200, 200, url); MultipartFile multipartFile= null; try { //创建一个ByteArrayOutputStream ByteArrayOutputStream os = new ByteArrayOutputStream(); //把BufferedImage写入ByteArrayOutputStream ImageIO.write(image, "jpg", os); //ByteArrayOutputStream转成InputStream InputStream input = new ByteArrayInputStream(os.toByteArray()); //InputStream转成MultipartFile multipartFile =new MockMultipartFile("file", "file.jpg", "text/plain", input); } catch (IOException e) { e.printStackTrace(); } return multipartFile; } public static String fileLoad(MultipartFile mf) throws IOException { //上传视频并返回视频地址 StorePath storePath = fastFileStorageClient.uploadFile(group,mf.getInputStream(), mf.getSize(), mf.getOriginalFilename().substring(mf.getOriginalFilename().lastIndexOf(".")+1)); //将视频地址和项目id存到项目资料表中 String videoUrl = "http://d-godone.yyy.tech/goDone/"+storePath.getPath(); return videoUrl; }以上是"Java中如何实现实现文件资料上传并生成缩略图"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
文件
生成
视频
方法
资料
对象
需求
处理
文件资料
图片
文档
问题
张有
成功
内容
地址
就是
时候
篇文章
类型
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
2b2t服务器的发展
京东 省市区数据库
北京联想服务器续保维护
韶华互联网科技广州
gdb转换sql数据库
服务器中存放应用的目录怎么找
网络安全证书有啥用
中国丢失物品数据库
胶州君惠润网络技术有限公司
移动软件开发与物联网
将数据库中表的数据按大小排序
公司服务器遭到不明攻击
湖南迈鼠互联网科技有限公司
成都东软数据库的创建与管理实验
华为的软件开发多少钱一个月
数据库实验二心得
网络安全知识竞赛多少分合格
服务器不优化怎么解决
最好的收银系统的软件开发
jdbc数据库面试
崇明区电话网络技术管理方法
网络软件开发包括什么
绩溪网络技术有限公司
烟台 服务器商户电话
不属于网络安全红线管理内容
绘画网络安全知识宣传海报
服务器上打开excel文件
网站服务器被人攻击
专业网络技术分类市场价
违反网络安全第47条