页面 :
上传文件时的关键词 : engType = "Multipart/Formdaten" "
<%@ page Language = "java" import = "java.util. String basepath = request.getScheme ()+": //"+request.getSerVername ()+":"+request.getServerport ()+Pfad+"/";%> <! DocType html public "-// w3c // dtd html 4,01 transitional // EN"> <html> <html> <html> <html> <html> <html> <html> <html> <html> <pace> <html> <- 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> <div> <div align="center"><h1>文件上传</h1></div> <hr> <form id="upload" method="post" action="uploadflv/upload.do" enctype="multipart/form-data"> <div align="center"> <div>文件上传 <input type="file" name="file" id="file"><br> <input type="submit" value="上传"> </div> </div> </form> </div> </div></body></html>
后台 :
Regler
importieren javax.servlet.http.httpServletRequest; import model organ. org.springFramework.web.servlet.ModelandView;@Controller@requestMapPing ("/uploadFlv") öffentliche Klasse UploadController {@RequestMapPing (value = "/Upload", Methode = {RequestMethod.Post, RequestMethod.get. MultipartFile MultipartFile, httpServletRequest -Anforderung, Modellmap -Karte) {String message = ""; FileEntity entity = new FileEntity (); FileUploadTool FileUploadTool = new FileUploadTool (); try {entity = FileUploadTool.CreateFile (MultipartFile, Anfrage); if (Entity! = null) {// service.savefile (Entity); Message = "上传成功"; map.put ("Entity", Entity); map.put ("Ergebnis", Nachricht); } else {message = "上传失败"; map.put ("Ergebnis", Nachricht); }} catch (Ausnahme e) {e.printstacktrace (); } Neue modelAndView zurückgeben ("Ergebnis", Karte); }}工具类
Import Java.io.file; Import Java.io.ioxception; Import Java.sql.timestamp; Import Java.Text.decimalformat; Import Java.util.Arrays; Import Java.util.iterator; org.springframework.web.multipart.multiPartFile; öffentliche Klasse FileUploadTool {transfMediDiDOool transfMediDOool = new transfmediDOool (); // 文件最大 500 m private statische long Upload_maxsize = 800 * 1024 * 1024; // 文件允许格式 private statische String [] erlaubte Files = {".rar", ".doc", ".docx", ".zip", ".pdf", ".txt", ".swf", ".xlsx", ".gif", ".png", ".jpgg4", ",", ",", ",", ",", ",", ",", ",". ".flv", ".ppt", ".avi", ".mpg", ".wmv", ".3gp", ".mov", ".asf", ".asx", ".vob", ".wmv9", ".rm", ".rmvb"}; // 允许转码的视频格式( ffmpeg) private statische String [] duldflv = {".avi", ".mpg", ".wmv", ".3gp", ".mov", ".asf", ".asx", ".vob"}; // 允许的视频转码格式 (MenCoder) private statische String [] erlaubig = {".Wmv9", ".rm", ".rmvb"}; public FileEntity createFile (MultiPartFile MultipartFile, httpServletRequest -Anforderung) {FileEntity entity = new FileEntity (); boolean bflag = false; String Dateiname = MultiPartFile.getOriginalFileName (). ToString (); // 判断文件不为空 if (multipartFile.getSize ()! = 0 &&! // 判断文件大小 if (multipartFile.getSize () <= upload_maxsize) {bflag = true; // 文件类型判断 if (this.CheckFiletype (Dateiname)) {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"; Datei logosaveFile = neue Datei (LogoreAlApathDir); if (! logosaveFile.exists ()) {logosaveFile.mkdirs (); } String name = Dateiname.substring (0, Dateiname.lastIndexof (".")); System.out.println ("文件名称 :" + Name); // 新的文件名 String newFileName = this.getName (Dateiname); // 文件扩展名 String fileEnd = this.getFileext (Dateiname); // 绝对路径 String filenamedirs = LogoreAlPathDir + Datei.Sesparator + newFileName + FileEnd; System.out.println ("保存的绝对路径 :" + Filenamedirs); Datei farredirs = neue Datei (Filenamedirs); // 转入文件 try {multipartFile.transferto (fungedirs); } catch (illegalStateException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); } // 相对路径 entity.setType (fileD); String farredir = logopathdir + newFileName + fileD; StringBuilder builder = new StringBuilder (fanedir); String FinalFiledir = builder.substring (1); // Größe 存储为 String String size = this.getSize (fanedirs); // 源文件保存路径 String avipath = farredirs.getabsolutepath (); // 转码 avi // boolean flag = false; if (this.CheckAvityPe (Dateiend)) {// 设置转换为 avi 格式后文件的保存路径 String codcavipath = logoreAlpathdir + file.separator + newFileName + ".avi"; // 获取配置的转换工具( Mencoder.exe )的存放路径 String mecoderPath = request.getSession (). avipath = transfmediatorool.Processavi (MencoderPath, fungedirs.getabsolutepath (), codcavipath); DateiEend = this.getFileext (codcavipath); } if (avipath! // 获取配置的转换工具( ffmpeg.exe )的存放路径 string ffmpegpath = request.getSession (). GetServletContext (). GetRealPath ("/tools/ffmpeg.exe"); TransfMediDiDOOL.PROCESSFLV (FFMPEGPATH, AVIPATH, CODCFILEPATH); f FileDir = logopathdir + newFileName + ".flv"; builder = new StringBuilder (fungedir); FinalFiledir = Builder.Substring (1); } catch (Ausnahme e) {e.printstacktrace (); }} entity.setSize (Größe); Entity.SetPath (FinalFiledir); Entity.SettitleOrig (Name); entity.settitlealter (newfilename); Timestamp timestamp = neuer Zeitstempel (System.currentTimemillis ()); Entity.SetUploadTime (Zeitstempel); Rückkehr; } else {return null; }} else {return null; }} / ** * 文件类型判断 * * @param Dateiname * @return * / private boolean checkFileType (String -Dateiname) {iterator <string> type = arrays.aslist (albonFiles) .Iterator (); while (type.hasnext ()) {string ext = type.next (); if (Dateiname.tolowerCase (). Endswith (ext)) {return true; }} return false; } / ** * 视频类型判断 (flv) * * @param Dateiname * @return * / private boolean CheckMediType (String FileEnd) {iterator <string> type = arrays.aslist (dingelflv) .Iiterator (); while (type.hasnext ()) {string ext = type.next (); if (FileEnd.equals (ext)) {return true; }} return false; } / ** * 视频类型判断 (avi) * * @param Dateiname * @return * / private boolean checkAvitype (String fileEnd) {iterator <string> type = arrays.aslist (duldAvi) .iterator (); while (type.hasnext ()) {string ext = type.next (); if (FileEnd.equals (ext)) {return true; }} return false; } / ** * 获取文件扩展名 * * @return String * / private String GetFileext (String Dateiname) {return FileName.substring (Dateiname.lastIndexof (".")); } / ** * 依据原始文件名生成新文件名 * @return * / private String getName (String -Dateiname) {iterator <string> type = arrays.aslist (degitleFiles) .iterator (); while (type.hasnext ()) {string ext = type.next (); if (Dateiname.Contains (ext)) {String newFileName = Dateiname.substring (0, Dateiname.lastIndexof (ext)); NeupileName zurückgeben; } } zurückkehren ""; } / ** * 文件大小 , 返回 kb.mb * * @return * / private String getSize (Dateidatei) {String size = ""; long filelength = file.length (); DecimalFormat df = new DecimalFormat ("#00"); if (filelength <1024) {size = df.Format ((doppelte) filelength) + "bt"; } else if (filelength <1048576) {size = df.format ((doppelte) filelength / 1024) + "kb"; } else if (filelength <1073741824) {size = df.format ((doppelte) filelgth / 1048576) + "mb"; } else {size = df.format ((doppelte) filelength / 1073741824) + "gb"; } Rückkehrgröße; }}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) {// 创建一个 Liste 集合来保存转换视频文件为 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 visesoprocess = new ProcessBuilder (konvertieren) .RedirecterrorStream (true) .Start (); neuer printstream (viseoprocess.getInputStream ()). start (); velevrocess.waitfor (); } catch (ioException e1) {e1.printstacktrace (); } catch (interruptedException e) {e.printstacktrace (); }} / ** * 对 ffmpeg 无法解析的文件格式 (wmv9 , rm , rmvb 等), 先用 Mencoder 转换为 avi (ffmpeg 能解析的) 格式 * * @param mecoderPath * 转码工具的存放路径 * @param upFilepath * 用于指定要转换格式的文件 要截图的视频源文件 * @param codcFilPath * 格式转换后的的文件保存路径 * 格式转换后的的文件保存路径 * 格式转换后的的文件保存路径 * @ * @ @proporam (@Param codcFilepath * 格式转换后的的文件保存路径 * 格式转换后的的文件保存路径 * 格式转换后的的文件保存路径 * 格式转换后的的文件保存路径 * @ @ @ @publics @publics processAVICiT * @ @ @publics processAVICiT * @ @| MencoderPath, String upfilepath, String codcavipath) {// boolean flag = false; List <String> commend = new ArrayList <string> (); empfehlen.Add (MencoderPath); empfehlen.Add (UPFILEPATH); empfehlen.Add ("-oac"); celfer.add ("mp3lame"); celfer.add ("-lameopts"); empfehlen.Add ("Preset = 64"); celfer.add ("-lavcopts"); celfer.add ("acodec = mp3: abitrate = 64"); empfehlen.Add ("-ovc"); empfehlen.Add ("xvid"); celfer.add ("-xvidencopts"); empfehlen.Add ("bitrate = 600"); empfehlen.Add ("-von"); empfehlen.add ("avi"); empfehlen.Add ("-o"); celfer.add (codcavipath); try {// 预处理进程 processBuilder builder = new ProcessBuilder (); Builder.Command (empfehlen); Builder.RedirecterrorStream (wahr); // 进程信息输出到控制台 Prozess p = builder.start (); BufferedReader BR = neuer BufferedReader (neuer InputStreamReader (P.GetInputStream ())); String line = null; while ((line = br.readline ())! = null) {System.out.println (Linie); } p.waitfor (); // 直到上面的命令执行完 , 才向下执行 return codcavipath; } catch (Ausnahme e) {e.printstacktrace (); null zurückkehren; }}} class printstream erweitert Thread {java.io.inputStream __is = null; public printStream (java.io.inputStream ist) {__is = is; } public void run () {try {while (this! = null) {int _ch = __is.read (); if (_ch! = -1) system.out.print ((char) _ch); sonst brechen; }} catch (Ausnahme e) {e.printstacktrace (); }}}实体类
importieren java.sql.timestamp; öffentliche KlassendateiEentity {private String -Typ; private Saitengröße; privater Stringweg; private String -Titelorig; private String Titlealter; private Zeitstempel -Upload -Zeit; public String gettType () {return type; } public void setType (String -Typ) {this.type = type; } public String getSIZE () {Return Size; } public void setSize (Stringgröße) {this.size = Größe; } public String getPath () {return path; } public void setPath (String -Pfad) {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 上传视频实例代码 , 希望对大家有所帮助 , 如果大家有任何疑问请给我留言 , 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持! 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持! 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!