国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Java上傳視頻實例代碼

2024-07-13 10:16:16
字體:
來源:轉載
供稿:網友

頁面:

上傳文件時的關鍵詞:enctype="multipart/form-data"

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%  String path = request.getContextPath();  String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>  <base href="<%=basePath%>" rel="external nofollow" >  <title>上傳視頻</title>  <meta http-equiv="pragma" content="no-cache">  <meta http-equiv="cache-control" content="no-cache">  <meta http-equiv="expires" content="0">  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  <meta http-equiv="description" content="This is my page"></head><body>  <div class="panel panel-default">    <div class="panel-body">      <div class="panel-heading" align="center"><h1 class="sub-header h3">文件上傳</h1></div>        <hr>      <form class="form-horizontal" id="upload" method="post" action="uploadflv/upload.do" enctype="multipart/form-data">        <div class="form-group" align="center">          <div class="col-md-4 col-sm-4 col-xs-4 col-lg-4">文件上傳            <input type="file" class="form-control" name="file" id="file"><br>            <input type="submit" value="上傳">          </div>        </div>      </form>    </div>  </div></body></html>

后臺:

controller

import javax.servlet.http.HttpServletRequest;import model.FileEntity;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.servlet.ModelAndView;@Controller@RequestMapping("/uploadflv")public class UploadController {  @RequestMapping(value = "/upload", method={RequestMethod.POST,RequestMethod.GET})  @ResponseBody  public ModelAndView upload(@RequestParam(value = "file", required = false) MultipartFile multipartFile,      HttpServletRequest request, ModelMap map) {    String message = "";    FileEntity entity = new FileEntity();    FileUploadTool fileUploadTool = new FileUploadTool();    try {      entity = fileUploadTool.createFile(multipartFile, request);      if (entity != null) {//        service.saveFile(entity);        message = "上傳成功";        map.put("entity", entity);        map.put("result", message);      } else {        message = "上傳失敗";        map.put("result", message);      }    } catch (Exception e) {      e.printStackTrace();    }    return new ModelAndView("result", map);  }}

工具類

import java.io.File;import java.io.IOException;import java.sql.Timestamp;import java.text.DecimalFormat;import java.util.Arrays;import java.util.Iterator;import javax.servlet.http.HttpServletRequest;import model.FileEntity;import org.springframework.web.multipart.MultipartFile;public class FileUploadTool {  TransfMediaTool transfMediaTool = new TransfMediaTool();  // 文件最大500M  private static long upload_maxsize = 800 * 1024 * 1024;  // 文件允許格式  private static String[] allowFiles = { ".rar", ".doc", ".docx", ".zip",      ".pdf", ".txt", ".swf", ".xlsx", ".gif", ".png", ".jpg", ".jpeg",      ".bmp", ".xls", ".mp4", ".flv", ".ppt", ".avi", ".mpg", ".wmv",      ".3gp", ".mov", ".asf", ".asx", ".vob", ".wmv9", ".rm", ".rmvb" };  // 允許轉碼的視頻格式(ffmpeg)  private static String[] allowFLV = { ".avi", ".mpg", ".wmv", ".3gp",      ".mov", ".asf", ".asx", ".vob" };  // 允許的視頻轉碼格式(mencoder)  private static String[] allowAVI = { ".wmv9", ".rm", ".rmvb" };  public FileEntity createFile(MultipartFile multipartFile, HttpServletRequest request) {    FileEntity entity = new FileEntity();    boolean bflag = false;    String fileName = multipartFile.getOriginalFilename().toString();    // 判斷文件不為空    if (multipartFile.getSize() != 0 && !multipartFile.isEmpty()) {      bflag = true;      // 判斷文件大小      if (multipartFile.getSize() <= upload_maxsize) {        bflag = true;        // 文件類型判斷        if (this.checkFileType(fileName)) {          bflag = true;        } else {          bflag = false;          System.out.println("文件類型不允許");        }      } else {        bflag = false;        System.out.println("文件大小超范圍");      }    } else {      bflag = false;      System.out.println("文件為空");    }    if (bflag) {      String logoPathDir = "/video/";      String logoRealPathDir = request.getSession().getServletContext().getRealPath(logoPathDir);      // 上傳到本地磁盤      // String logoRealPathDir = "E:/upload";      File logoSaveFile = new File(logoRealPathDir);      if (!logoSaveFile.exists()) {        logoSaveFile.mkdirs();      }      String name = fileName.substring(0, fileName.lastIndexOf("."));      System.out.println("文件名稱:" + name);      // 新的文件名      String newFileName = this.getName(fileName);      // 文件擴展名      String fileEnd = this.getFileExt(fileName);      // 絕對路徑      String fileNamedirs = logoRealPathDir + File.separator + newFileName + fileEnd;      System.out.println("保存的絕對路徑:" + fileNamedirs);      File filedirs = new File(fileNamedirs);      // 轉入文件      try {        multipartFile.transferTo(filedirs);      } catch (IllegalStateException e) {        e.printStackTrace();      } catch (IOException e) {        e.printStackTrace();      }      // 相對路徑      entity.setType(fileEnd);      String fileDir = logoPathDir + newFileName + fileEnd;      StringBuilder builder = new StringBuilder(fileDir);      String finalFileDir = builder.substring(1);      // size存儲為String      String size = this.getSize(filedirs);      // 源文件保存路徑      String aviPath = filedirs.getAbsolutePath();      // 轉碼Avi//      boolean flag = false;      if (this.checkAVIType(fileEnd)) {        // 設置轉換為AVI格式后文件的保存路徑        String codcAviPath = logoRealPathDir + File.separator + newFileName + ".avi";        // 獲取配置的轉換工具(mencoder.exe)的存放路徑        String mencoderPath = request.getSession().getServletContext().getRealPath("/tools/mencoder.exe");        aviPath = transfMediaTool.processAVI(mencoderPath, filedirs.getAbsolutePath(), codcAviPath);        fileEnd = this.getFileExt(codcAviPath);      }      if (aviPath != null) {        // 轉碼Flv        if (this.checkMediaType(fileEnd)) {          try {            // 設置轉換為flv格式后文件的保存路徑            String codcFilePath = logoRealPathDir + File.separator + newFileName + ".flv";            // 獲取配置的轉換工具(ffmpeg.exe)的存放路徑            String ffmpegPath = request.getSession().getServletContext().getRealPath("/tools/ffmpeg.exe");            transfMediaTool.processFLV(ffmpegPath, aviPath,  codcFilePath);            fileDir = logoPathDir + newFileName + ".flv";            builder = new StringBuilder(fileDir);            finalFileDir = builder.substring(1);          } catch (Exception e) {            e.printStackTrace();          }        }        entity.setSize(size);        entity.setPath(finalFileDir);        entity.setTitleOrig(name);        entity.setTitleAlter(newFileName);        Timestamp timestamp = new Timestamp(System.currentTimeMillis());        entity.setUploadTime(timestamp);        return entity;      } else {        return null;      }    } else {      return null;    }  }  /**   * 文件類型判斷   *   * @param fileName   * @return   */  private boolean checkFileType(String fileName) {    Iterator<String> type = Arrays.asList(allowFiles).iterator();    while (type.hasNext()) {      String ext = type.next();      if (fileName.toLowerCase().endsWith(ext)) {        return true;      }    }    return false;  }  /**   * 視頻類型判斷(flv)   *   * @param fileName   * @return   */  private boolean checkMediaType(String fileEnd) {    Iterator<String> type = Arrays.asList(allowFLV).iterator();    while (type.hasNext()) {      String ext = type.next();      if (fileEnd.equals(ext)) {        return true;      }    }    return false;  }  /**   * 視頻類型判斷(AVI)   *   * @param fileName   * @return   */  private boolean checkAVIType(String fileEnd) {    Iterator<String> type = Arrays.asList(allowAVI).iterator();    while (type.hasNext()) {      String ext = type.next();      if (fileEnd.equals(ext)) {        return true;      }    }    return false;  }  /**   * 獲取文件擴展名   *   * @return string   */  private String getFileExt(String fileName) {    return fileName.substring(fileName.lastIndexOf("."));  }  /**   * 依據原始文件名生成新文件名   * @return   */  private String getName(String fileName) {    Iterator<String> type = Arrays.asList(allowFiles).iterator();    while (type.hasNext()) {      String ext = type.next();      if (fileName.contains(ext)) {        String newFileName = fileName.substring(0, fileName.lastIndexOf(ext));        return newFileName;      }    }    return "";  }  /**   * 文件大小,返回kb.mb   *   * @return   */  private String getSize(File file) {    String size = "";    long fileLength = file.length();    DecimalFormat df = new DecimalFormat("#.00");    if (fileLength < 1024) {      size = df.format((double) fileLength) + "BT";    } else if (fileLength < 1048576) {      size = df.format((double) fileLength / 1024) + "KB";    } else if (fileLength < 1073741824) {      size = df.format((double) fileLength / 1048576) + "MB";    } else {      size = df.format((double) fileLength / 1073741824) + "GB";    }    return size;  }}import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;public class TransfMediaTool {  /**   * 視頻轉碼flv   *   * @param ffmpegPath   *      轉碼工具的存放路徑   * @param upFilePath   *      用于指定要轉換格式的文件,要截圖的視頻源文件   * @param codcFilePath   *      格式轉換后的的文件保存路徑   * @return   * @throws Exception   */  public void processFLV(String ffmpegPath, String upFilePath, String codcFilePath) {    // 創建一個List集合來保存轉換視頻文件為flv格式的命令    List<String> convert = new ArrayList<String>();    convert.add(ffmpegPath); // 添加轉換工具路徑    convert.add("-i"); // 添加參數"-i",該參數指定要轉換的文件    convert.add(upFilePath); // 添加要轉換格式的視頻文件的路徑    convert.add("-ab");    convert.add("56");    convert.add("-ar");    convert.add("22050");    convert.add("-q:a");    convert.add("8");    convert.add("-r");    convert.add("15");    convert.add("-s");    convert.add("600*500");    /*     * convert.add("-qscale"); // 指定轉換的質量 convert.add("6");     * convert.add("-ab"); // 設置音頻碼率 convert.add("64"); convert.add("-ac");     * // 設置聲道數 convert.add("2"); convert.add("-ar"); // 設置聲音的采樣頻率     * convert.add("22050"); convert.add("-r"); // 設置幀頻 convert.add("24");     * convert.add("-y"); // 添加參數"-y",該參數指定將覆蓋已存在的文件     */    convert.add(codcFilePath);    try {      Process videoProcess = new ProcessBuilder(convert).redirectErrorStream(true).start();      new PrintStream(videoProcess.getInputStream()).start();      videoProcess.waitFor();    } catch (IOException e1) {      e1.printStackTrace();    } catch (InterruptedException e) {      e.printStackTrace();    }  }  /**   * 對ffmpeg無法解析的文件格式(wmv9,rm,rmvb等), 先用mencoder轉換為avi(ffmpeg能解析的)格式   *   * @param mencoderPath   *      轉碼工具的存放路徑   * @param upFilePath   *      用于指定要轉換格式的文件,要截圖的視頻源文件   * @param codcFilePath   *      格式轉換后的的文件保存路徑   * @return   * @throws Exception   */  public String processAVI(String mencoderPath, String upFilePath, String codcAviPath) {//    boolean flag = false;    List<String> commend = new ArrayList<String>();    commend.add(mencoderPath);    commend.add(upFilePath);    commend.add("-oac");    commend.add("mp3lame");    commend.add("-lameopts");    commend.add("preset=64");    commend.add("-lavcopts");    commend.add("acodec=mp3:abitrate=64");    commend.add("-ovc");    commend.add("xvid");    commend.add("-xvidencopts");    commend.add("bitrate=600");    commend.add("-of");    commend.add("avi");    commend.add("-o");    commend.add(codcAviPath);    try {      // 預處理進程      ProcessBuilder builder = new ProcessBuilder();      builder.command(commend);      builder.redirectErrorStream(true);      // 進程信息輸出到控制臺      Process p = builder.start();      BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));      String line = null;      while ((line = br.readLine()) != null) {        System.out.println(line);      }      p.waitFor();// 直到上面的命令執行完,才向下執行      return codcAviPath;    } catch (Exception e) {      e.printStackTrace();      return null;    }  }}class PrintStream extends Thread {  java.io.InputStream __is = null;  public PrintStream(java.io.InputStream is) {    __is = is;  }  public void run() {    try {      while (this != null) {        int _ch = __is.read();        if (_ch != -1)          System.out.print((char) _ch);        else          break;      }    } catch (Exception e) {      e.printStackTrace();    }  }}

實體類

import java.sql.Timestamp;public class FileEntity {  private String type;  private String size;  private String path;  private String titleOrig;  private String titleAlter;  private Timestamp uploadTime;  public String getType() {    return type;  }  public void setType(String type) {    this.type = type;  }  public String getSize() {    return size;  }  public void setSize(String size) {    this.size = size;  }  public String getPath() {    return path;  }  public void setPath(String path) {    this.path = path;  }  public String getTitleOrig() {    return titleOrig;  }  public void setTitleOrig(String titleOrig) {    this.titleOrig = titleOrig;  }  public String getTitleAlter() {    return titleAlter;  }  public void setTitleAlter(String titleAlter) {    this.titleAlter = titleAlter;  }  public Timestamp getUploadTime() {    return uploadTime;  }  public void setUploadTime(Timestamp uploadTime) {    this.uploadTime = uploadTime;  }}

總結

以上所述是小編給大家介紹的Java上傳視頻實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 奉贤区| 兴安盟| 萝北县| 巧家县| 塔河县| 孝义市| 化德县| 花垣县| 达拉特旗| 恭城| 昂仁县| 六安市| 喀喇| 乐清市| 盈江县| 贡嘎县| 巴彦淖尔市| 广平县| 邢台市| 合作市| 梁平县| 枞阳县| 平山县| 金堂县| 青神县| 枞阳县| 宾阳县| 扎鲁特旗| 潼关县| 贵溪市| 台前县| 元阳县| 司法| 丰台区| 武川县| 凤庆县| 涟水县| 双江| 利川市| 榆树市| 双峰县|