目录

一:需求

二:如何实现需求,以及其中遇到的问题?

需求分析时遇到的问题

编码过程中遇到的问题

三:流程图与UML图

四:上传文件资料生成缩略图

1.上传图片生成缩略图--FastDFS

2.上传视频生成缩略图--javacv

3.上传PDF生成缩略图--pdfbox

4.封装好的方法

五:总结


一:需求

用户有一个需求就是收藏的功能,单纯的收藏记录好做,但是想加点难度就是,生成缩略图。类似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
@Component
public class ImageProcessing extends TypeProcessing{@Autowiredprivate FastFileStorageClient fastFileStorageClient;@Autowiredprivate ThumbImageConfig thumbImageConfig;private  String group="http://192.168.y.y:8888/group1/";/**** @param fileName 本地文件的位置* @return*/@Overridepublic 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
@Slf4j
public class VideoProcessing extends TypeProcessing {@Overridepublic 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
@Component
public class PDFProcessing extends TypeProcessing{@Overridepublic String fileUpload(String fileName) {String pdfUrl="";try{//将读取URL生成FileFile 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();//注意关闭文档与删除文档的顺序//删除临时的fileString 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 {//创建一个ByteArrayOutputStreamByteArrayOutputStream os = new ByteArrayOutputStream();//把BufferedImage写入ByteArrayOutputStreamImageIO.write(image, "jpg", os);//ByteArrayOutputStream转成InputStreamInputStream input = new ByteArrayInputStream(os.toByteArray());//InputStream转成MultipartFilemultipartFile =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;}

五:总结

1.收到需求先拆分业务、梳理逻辑,通过画图、伪代码的形式去熟悉业务,梳理逻辑

2.将大的工作任务,拆分成小块。一点一点去实现,然后再去串起来。

3.遇到困难,不要怕,总会有解决办法,好的办法要不断查找才能获得。

如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。

上传文件资料并生成缩略图相关推荐

  1. WordPress彻底禁用上传媒体图片自动生成缩略图及多尺寸图片(亲测可用)

    WordPress默认上传图片的时候会自动生成缩略图及多尺寸的图片文件,大部分网站都用不到这些多余的图片,不仅仅占用空间,而且上传的时候还会消耗额外的性能. 下面仅需两段函数代码即可彻底禁用该功能. ...

  2. fastdfs上传文件资料(PDF,视频,图片,FileCaseUtil,FileUploadUtil)并生成缩略图

    javacv里面有类型转换器的使用,对视频图片的处理工具等等 一.UML图 二.代码 pom依赖 <!-- fastdfs--><dependency><groupId& ...

  3. php 上传类 缩略图,php图片文件上传类 (附自动生成缩略图) | 学步园

    /** 作 者:冻结回忆 (linghunts@163.com); 功 能:文件上传类 支持文件夹自动分组保存(2008-01/09); 时 间:2007-10-17; 创建类:参数(文件域,文件原名 ...

  4. php 缩略图增加水印,php 图片上传代码(具有生成缩略图与增加水印功能)

    class upfile { public $filepath = "www.111com.net/"; //上传文件存放文件夹 public $filesize = 100000 ...

  5. dropzone js video上传使用frame-grap.js生成缩略图

    第一步:从github上下载frame-grap组件,下载的压缩里,只有下面两个文件是有用的 rsvp.js 和 frame-grab.js,目录: /frame-grab.js-master/cli ...

  6. java上传文件(java上传文件夹)

    Java如何删除文件? private void deleteFiles(List fileList, String path) { for (int index = 0; index fileLis ...

  7. Ajax上传文件(原生JS篇)

    工作中用到了Ajax上传文件的情景 之前自己不知道ajax可以传 通过文档发现XHR2.0已经支持了 但需要集合FormData 目录结构 test 一级 files 二级 index.html 二级 ...

  8. 上传txt生成字典 java_文件上传漏洞fuzz字典生成脚本小工具分享

    前言 学习xss的时候翻阅资料发现了一个文件上传漏洞fuzz字典生成脚本小工具,试了试还不错,分享一下 配置 需要python2环境 使用方法 $ python upload-fuzz-dic-bui ...

  9. 腾讯云 对象存储Java文件上传 学习资料整理

    # 初始化AmazonS3 前置要求: 获取密钥对:secretID:secretKey 有效Endpoint:nos-eastchina1.126.net 安装SDK --> 即Maven依赖 ...

最新文章

  1. DataGridView发生异常
  2. ZZULIOJ 1918: G 【二分图匹配】
  3. php正则相对地址,php – 正则表达式将相对URL更改为绝对值
  4. 静态 非静态代码块和构造器的执行顺序测试方法
  5. 程序员加班到凌晨,第二天却被开除,了解原因后大家都说大快人心
  6. 设计模式原则之三:接口隔离原则
  7. 解决相片上传主键唯一性问题,java 上传相片到服务器的时候,相片保存主键用guid。...
  8. spine 破解 闪退打不开
  9. python八大排序算法_Python实现八大排序算法
  10. G6实现家族族谱关系图
  11. 数据全裸时代,公开获取上百万条四六级成绩
  12. “乌龙学院”的是是非非
  13. 李航统计学习方法总结与整理
  14. 网络——奈奎斯特定理和香农定理
  15. STM32第二课(cubemx,clk,gpio,)
  16. APK打包的详细说明
  17. c/c++实现window简易串口通信
  18. linux下查看磁盘空间
  19. linux动态磁盘怎么转换,动态磁盘转换器【使用办法】
  20. 2022年全球及中国半导体市场现状分析:数字化转型带来新机遇

热门文章

  1. matlab eqs,EQS(奔驰eqs什么时候上市)
  2. Unreal 入门-EQS
  3. 2022年初级会计职称考试会计实务练习题及答案
  4. 使用Xshell连接到AWS云主机
  5. 解决matplotlib不显示图片
  6. 苦咖啡·唯一 - 那奇沃夫/KKECHO
  7. android 永久root权限,安卓 实现永久性开启adb 的root权限
  8. jpg转bmp(使用libjpeg)
  9. kafka的消费顺序_Kafka如何保证消息的顺序性
  10. 磨金石教育摄影技能干货分享|优秀摄影作品欣赏——艺术的表达