Springboot實現(xiàn)視頻上傳及壓縮功能
在SpringBoot項目中實現(xiàn)視頻的上傳和下載,地址都是存放至阿里云的,但是由于視頻數(shù)量越來越多占用的內(nèi)存也越來越大,導(dǎo)致服務(wù)器內(nèi)存不足,公司為了減少服務(wù)器開支,要求我們研發(fā)人員把最好把內(nèi)存利用到極致,盡量減少不必要的浪費,所以就需要把視頻進行壓縮。
一、定義視頻上傳請求接口
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;
}五、核心調(diào)用
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)的下標(biāo)
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ù)自己項目實際情況做調(diào)整,這篇最核心的是視頻壓縮的方法及思路。
到此這篇關(guān)于Springboot實現(xiàn)視頻上傳及壓縮功能的文章就介紹到這了,更多相關(guān)Springboot視頻上傳壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC中的DispatcherServlet詳細解析
這篇文章主要介紹了SpringMVC中的DispatcherServlet詳細解析,DispatcherServlet也是一個Servlet,它也能通過Servlet的API來響應(yīng)請求,從而成為一個前端控制器,Web容器會調(diào)用Servlet的doGet()以及doPost()等方法,需要的朋友可以參考下2023-12-12
SpringBoot如何使用validator框架優(yōu)雅地校驗參數(shù)
文章介紹了如何使用SpringValidation進行參數(shù)校驗,包括引入依賴、@requestBody和@requestParam參數(shù)校驗、統(tǒng)一異常處理、分組校驗、嵌套校驗、自定義校驗、業(yè)務(wù)規(guī)則校驗以及@Valid和@Validated的區(qū)別,同時,列舉了常用的BeanValidation和HibernateValidator注解2025-02-02
關(guān)于maven依賴 ${xxx.version}報錯問題
這篇文章主要介紹了關(guān)于maven依賴 ${xxx.version}報錯問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
Springboot 如何指定獲取出 yml文件里面的配置值
這篇文章主要介紹了Springboot 如何指定獲取出 yml文件里面的配置值操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Java創(chuàng)建隨機數(shù)的四種方式總結(jié)
這篇文章主要介紹了java的四種隨機數(shù)生成方式的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下2022-07-07
springboot 設(shè)置局域網(wǎng)訪問的實現(xiàn)步驟
Spring Boot是一個開源Java-based框架,用于創(chuàng)建獨立的、生產(chǎn)級別的Spring應(yīng)用,它旨在簡化Spring應(yīng)用的初始搭建及開發(fā)過程,通過提供各種自動配置的starter包,Spring Boot使得項目配置變得簡單快速,感興趣的朋友一起看看吧2024-02-02

