欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot實(shí)現(xiàn)視頻上傳及壓縮功能

 更新時(shí)間:2023年03月03日 10:20:06   作者:小盟主  
這篇文章主要介紹了Springboot實(shí)現(xiàn)視頻上傳及壓縮功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

  在SpringBoot項(xiàng)目中實(shí)現(xiàn)視頻的上傳和下載,地址都是存放至阿里云的,但是由于視頻數(shù)量越來越多占用的內(nèi)存也越來越大,導(dǎo)致服務(wù)器內(nèi)存不足,公司為了減少服務(wù)器開支,要求我們研發(fā)人員把最好把內(nèi)存利用到極致,盡量減少不必要的浪費(fèi),所以就需要把視頻進(jìn)行壓縮。

一、定義視頻上傳請求接口

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://", "/");
    //字符串第一個(gè)字符最后出現(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

視頻上傳至阿里云這一塊代碼沒有貼出來,每個(gè)項(xiàng)目都大同小異,可根據(jù)自己項(xiàng)目實(shí)際情況做調(diào)整,這篇最核心的是視頻壓縮的方法及思路。

到此這篇關(guān)于Springboot實(shí)現(xiàn)視頻上傳及壓縮功能的文章就介紹到這了,更多相關(guān)Springboot視頻上傳壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Java編程中的單例設(shè)計(jì)模式

    淺談Java編程中的單例設(shè)計(jì)模式

    這篇文章主要介紹了Java編程中的單例設(shè)計(jì)模式,在許多語言的編程過程當(dāng)中單例模式都被開發(fā)者們廣泛采用,需要的朋友可以參考下
    2015-07-07
  • 全面解析Java觀察者模式

    全面解析Java觀察者模式

    這篇文章主要幫助大家全面解析Java觀察者模式,了解java設(shè)計(jì)模式中的觀察者模式,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java 負(fù)載均衡的 5 種算法實(shí)現(xiàn)原理

    Java 負(fù)載均衡的 5 種算法實(shí)現(xiàn)原理

    這篇文章主要介紹Java 負(fù)載均衡的 5 種算法實(shí)現(xiàn)原理,負(fù)載均衡能夠平均分配客戶請求到服 務(wù)器陣列,借此提供快速獲取重要數(shù)據(jù),解決大量并發(fā)訪問服務(wù)問題,這種集群技術(shù)可以用最少的投資獲得接近于大型主機(jī)的性能。下面就來看看文章的具體內(nèi)容吧
    2021-10-10
  • mybatis plus自動生成代碼tinyint(1)自動轉(zhuǎn)換為Boolean的問題及解決

    mybatis plus自動生成代碼tinyint(1)自動轉(zhuǎn)換為Boolean的問題及解決

    這篇文章主要介紹了mybatis plus自動生成代碼tinyint(1)自動轉(zhuǎn)換為Boolean的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 淺談Java8 的foreach跳出循環(huán)break/return

    淺談Java8 的foreach跳出循環(huán)break/return

    這篇文章主要介紹了Java8 的foreach跳出循環(huán)break/return,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中消息隊(duì)列任務(wù)的平滑關(guān)閉詳解

    Java中消息隊(duì)列任務(wù)的平滑關(guān)閉詳解

    對于消息隊(duì)列的監(jiān)聽,我們一般使用Java寫一個(gè)獨(dú)立的程序,在Linux服務(wù)器上運(yùn)行。程序啟動后,通過消息隊(duì)列客戶端接收消息,放入一個(gè)線程池進(jìn)行異步處理,并發(fā)的快速處理。這篇文章主要給大家介紹了關(guān)于Java中消息隊(duì)列任務(wù)的平滑關(guān)閉的相關(guān)資料,需要的朋友可以參考下。
    2017-11-11
  • Java實(shí)現(xiàn)ModbusTCP通信功能

    Java實(shí)現(xiàn)ModbusTCP通信功能

    使用ModbusTCP實(shí)現(xiàn)和硬件設(shè)備通信功能,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-08-08
  • Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之生活旅行分享平臺的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之生活旅行分享平臺的實(shí)現(xiàn)

    這是一個(gè)使用了java+Springboot+JPA+Jsp+Html+js+Ajax+maven+mysql開發(fā)的生活旅行分享平臺,是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有分享發(fā)布平臺該有的所有功能,感興趣的朋友快來看看吧
    2022-02-02
  • Dubbo在Spring和Spring Boot中的使用詳解

    Dubbo在Spring和Spring Boot中的使用詳解

    這篇文章主要介紹了Dubbo在Spring和Spring Boot中的使用詳解,需要的朋友可以參考下
    2017-10-10
  • Java中關(guān)于size()>0?和isEmpt()的性能考量

    Java中關(guān)于size()>0?和isEmpt()的性能考量

    這篇文章主要介紹了Java中關(guān)于size()>0?和isEmpt()性能考量,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評論