Springboot實現(xiàn)視頻上傳及壓縮功能
在SpringBoot項目中實現(xiàn)視頻的上傳和下載,地址都是存放至阿里云的,但是由于視頻數(shù)量越來越多占用的內存也越來越大,導致服務器內存不足,公司為了減少服務器開支,要求我們研發(fā)人員把最好把內存利用到極致,盡量減少不必要的浪費,所以就需要把視頻進行壓縮。
一、定義視頻上傳請求接口
public AjaxResult videoUploadFile(MultipartFile file){ try { if(null == file || file.isEmpty()){ return AjaxResult.error("文件為空"); } String ossFilePrefix = StringUtils.genUUID(); String fileName = ossFilePrefix +"-"+ file.getOriginalFilename(); String fileurl = AliOssUtils.videoUploadFile(file,fileName); AjaxResult ajax = AjaxResult.success(); ajax.put("fileName", "after_"+fileName); ajax.put("url", fileurl); return ajax; } catch (Exception e) { return AjaxResult.error(e.getMessage()); } }
二、視頻暫存至本地文件夾
public static final String uploadVideo(String baseDir, MultipartFile file, String fileName) throws FileSizeLimitExceededException, IOException { File desc = getAbsoluteFile(baseDir, fileName); file.transferTo(desc); String pathFileName = getPathFileName(baseDir, fileName); return pathFileName; }
三、開始壓縮視頻
public static boolean toCompressFile(String convertFile,String targetFile){ try{ /**將視頻壓縮為 每秒15幀 平均碼率600k 畫面的寬與高 為1280*720*/ String cutCmd="ffmpeg -i " + convertFile + " -r 15 -b:v 600k -s 1280x720 "+ targetFile; log.info("cutCmd: " + cutCmd); runCmd(cutCmd); log.info("文件:"+convertFile+" 視屏壓縮完成"); }catch(Exception e){ e.printStackTrace(); log.info("壓縮文件出現(xiàn)異常:"+e.getMessage()); return false; } return true; }
四、上傳至阿里云并獲取壓縮后的視頻路徑
private static String getFileUrl(String path) throws IOException { File file = new File(path); FileInputStream fileInputStream = new FileInputStream(file); MultipartFile multipartFile1 = new MockMultipartFile(file.getName(), file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream); uploadFile(multipartFile1, file.getName()); String url = getUrl(file.getName()); return url; }
五、核心調用
public static String videoUploadFile(MultipartFile multipartFile, String fileName) throws IOException { //存放路徑 String filePath = FileUploadUtils.uploadVideo(getDefaultBaseDir(), multipartFile, fileName); String convertFile = filePath.replace("/profile", getDefaultBaseDir()).replaceAll("http://", "/"); //字符串第一個字符最后出現(xiàn)的下標 int lastIndex = convertFile.lastIndexOf("/"); StringBuilder sb = new StringBuilder(convertFile); String convertFile1 = sb.insert(lastIndex + 1, "after_").toString(); boolean flag = toCompressFile(convertFile, convertFile1); if (!flag) { throw new CustomException("文件壓縮出現(xiàn)異常"); } //讀取壓縮后的文件并上傳至阿里云 String url = getFileUrl(convertFile1); //刪除本地暫存文件 FileUtils.deleteFile(convertFile); log.info("文件:" + convertFile + " 刪除成功"); FileUtils.deleteFile(convertFile1); log.info("文件:" + convertFile1 + " 刪除成功"); return url; }
六、spring boot的yml配置文件
修改application.yml文件:
spring:
servlet:
mvc:
async:
request-timeout: 2000000
修改application-prd.yml文件:
spring:
servlet:
multipart:
max-file-size: 1024MB
max-request-size: 1024MB
視頻上傳至阿里云這一塊代碼沒有貼出來,每個項目都大同小異,可根據(jù)自己項目實際情況做調整,這篇最核心的是視頻壓縮的方法及思路。
到此這篇關于Springboot實現(xiàn)視頻上傳及壓縮功能的文章就介紹到這了,更多相關Springboot視頻上傳壓縮內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mybatis plus自動生成代碼tinyint(1)自動轉換為Boolean的問題及解決
這篇文章主要介紹了mybatis plus自動生成代碼tinyint(1)自動轉換為Boolean的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08淺談Java8 的foreach跳出循環(huán)break/return
這篇文章主要介紹了Java8 的foreach跳出循環(huán)break/return,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Java畢業(yè)設計實戰(zhàn)之生活旅行分享平臺的實現(xiàn)
這是一個使用了java+Springboot+JPA+Jsp+Html+js+Ajax+maven+mysql開發(fā)的生活旅行分享平臺,是一個畢業(yè)設計的實戰(zhàn)練習,具有分享發(fā)布平臺該有的所有功能,感興趣的朋友快來看看吧2022-02-02Dubbo在Spring和Spring Boot中的使用詳解
這篇文章主要介紹了Dubbo在Spring和Spring Boot中的使用詳解,需要的朋友可以參考下2017-10-10Java中關于size()>0?和isEmpt()的性能考量
這篇文章主要介紹了Java中關于size()>0?和isEmpt()性能考量,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02