美文网首页
springboot 调用外部工具如ffmpeg工具加载类

springboot 调用外部工具如ffmpeg工具加载类

作者: BeeHoney | 来源:发表于2018-12-29 17:01 被阅读0次

    使用场景: 有时候springboot开发的jar服务,需要调用外部的一个命令行工具文件,如ffmpeg。
    我们可以将ffmpeg 放入src/main/resources/tool目录。然后java -jar 启动服务时,将ffmpeg写入到外部的一个目录,为此我特意写了一个工具类,可以在运行jar时只生成一次,或者ffmpeg版本变了覆盖刷新。

    @Slf4j
    @Configuration
    public class LibFileInit {
    
    
    
        // 加载 resources目录下的工具文件相对路径 如:/tool/ffmpeg
        @Value("${system.loadLibDir}")
        private String loadLibDir;
    
        // 将加载的文件放入的目录 如 /sbin/
        @Value("${system.outLibDir}")
        private String outLibDir;
    
        // 是否每次运行服务都覆盖老版本的外部工具,默认 false
        @Value("${system.loadLibFlag}")
        private Boolean loadLibFlag;
    
        @Bean
        public LibFileInit FfdynsourceInit() throws IOException {
    
            copyFile(new String[]{loadLibDir},outLibDir,loadLibFlag);
            log.info("=====================this lib file init ok!");
    
    
            return new LibFileInit();
        }
    
        // 拷贝文件 flag
        public void copyFile(String[] fPaths,String outPath,Boolean flag) throws IOException{
            Boolean status  = false;
            // List<String> fPaths = new ArrayList<>();
    
            for (String path:fPaths){
    
                ResourceLoader resourceLoader = new DefaultResourceLoader();
                Resource resource = resourceLoader.getResource("classpath:"+path);
                if (resource.exists()){
                    InputStream is = resource.getInputStream();
    
                    File pathF = new File(outPath);
                    if (!pathF.exists()){
                        pathF.mkdirs();
                    }
                    File f = new File(outPath,path.substring(path.lastIndexOf("/"),path.length()));
                    log.info("create file path 文件路径:{}",f.getAbsolutePath());
                    if (flag && f.exists()){
                        f.delete();
                    }
    
                    if (!f.exists()){
                        f.createNewFile();
                        f.setReadable(true);
                        f.setWritable(true);
                        f.setExecutable(true);
                        BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(f, false));
                        int lentgh = 0;
                        while ((lentgh = is.read()) != -1) {
                            os.write(lentgh);
                        }
    
                        is.close();
                        os.close();
                    }
                }
    
            }
    
        }
    }
    

    更多,请关注:
    springboot 技术实践总结

    相关文章

      网友评论

          本文标题:springboot 调用外部工具如ffmpeg工具加载类

          本文链接:https://www.haomeiwen.com/subject/kchklqtx.html