Java中如何实现实现文件资料上传并生成缩略图
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍Java中如何实现实现文件资料上传并生成缩略图,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一:需求用户有一个需求就是收藏的功能,单纯的收藏记录好做,但是想加点
千家信息网最后更新 2026年11月04日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安全错误
数据库的锁怎样保障安全
耶加雪菲
互联网通讯科技
关于新基建和互联网科技
科技创新互联网企业
青海省互联网新科技
博兴的互联网电子科技公司
互联网科技实习生岗位职责
华服互联网科技官网
互联网为啥属于高科技
重庆互联网医院沙龙医盟信息科技
内蒙古九一互联网科技
工业互联网山东科技大学
怎样加入科技互联网
互联网科技资金流入
21世纪互联网科技成就
浙南科技城互联网大厦招聘
中国互联网公司的科技投入
黑龙江互联网科技公司
网互联网络科技
高科技和互联网的现代国家
中国互联网科技工作委员会毛军
互联网科技小贷
广州慧亚互联网科技怎么样
互联网为啥属于高科技
电子科技大学互联网创业大赛
深圳市罗太互联网科技有限公司
互联网在线教育科技创业
互联网科技资金流入
杭州科技互联网公司有哪些
广州全民伙伴互联网科技有限公司