页面 :
: : Ectype = "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> <Base hre href = natfathepath-n "<%href = ratsepath-n" en '> <html> <head> <base> <ceptiptionalal/en "> <html> <head> <ceptory 4.01. rel = "внешний nofollow"> <title> 上传视频 </title> <meta http-equiv = "pragma" content = "no-cache"> <meta http-equiv = "cach-control" = "без cache"> <meta http-equiv = "истекает" content = "0"> <meta http-equiv = "equiv =" истекает ". content = "Keyword1, Keyword2, Keyword3"> <Meta Http-equiv = "Описание" content = "Это моя страница"> </head> <body> <div> <div> <div align = "center"> <h1> 文件上传 </h1> </div> <hr> <form id = "upload" method = "optult actuld. ectype = "multipart/form-data"> <div align = "center"> <div> 文件上传 <input type = "file" name = "file" id = "file"> <br> <input type = "pospot" value = "上传"> </div> </div> </form> </div> </div> </body> </html> </form> </div> </div> </body> </html>
后台 :
контроллер
Импорт javax.servlet.http.httpservletrequest; import model.fileentity; import org.springframework.stereotype.controller; импорт org.springframework.ui.modelmap; import.springframework.web.bind.annotation.Requestmapp; org.springframework.web.bind.annotation.requestmethod; импорт org.springframework.web.bind.annotation.requestparam; импорт org.springframework.web.bindtation.responsebody; импорт org.spramework.web.multipart.multipart. 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 MultiplaartFile, httpservletRequest, ModelMap Map) {String message = ""; FileEntity entity = new FileEltity (); Fileuploadtool fileuploadtool = new FileUploadTool (); try {entity = fileuploadtool.createfile (MultipartFile, запрос); if (Entity! = null) {// service.savefile (entity); Сообщение = "上传成功"; map.put ("Entity", Entity); map.put («результат», сообщение); } else {message = "上传失败"; map.put («результат», сообщение); }} catch (Exception e) {e.printstackTrace (); } вернуть New ModelAndView ("result", map); }}工具类
Импорт java.io.file; импорт java.io.ioexception; import java.sql.timestamp; import java.text.decimalformat; import java.util.arrays; import java.util.iterator; импорт javax.servlet.http.httpservlectrequest; импорт. org.springframework.web.multipart.multipartfile; public class fileuploadtool {transfmediatool transfmediatool = new TransfMediatool (); // 文件最大 500M частная статическая длинная upload_maxsize = 800 * 1024 * 1024; // 文件允许格式 Приватная статическая строка [] alluctfiles = {".rar", ".doc", ".docx", ".zip", ".pdf", ".txt", ".swf", ".xlsx", ".gif", ".png", ".jpg", ".jpeg", ".". ".flv", ".ppt", ".avi", ".mpg", ".wmv", ".3gp", ".mov", ".asf", ".asx", ".vob", ".wmv9", ".rm", ".rmvb"}; // 允许转码的视频格式 (ffmpeg) частная статическая строка [] allowflv = {".avi", ".mpg", ".wmv", ".3gp", ".mov", ".asf", ".asx", ".vob"}; // 允许的视频转码格式 (mencoder) частная статическая строка [] allingavi = {".wmv9", ".rm", ".rmvb"}; public fileEntity CreateFile (MultipArtFile MultipArtFile, httpservletRequest запрос) {fileEltity entity = new FileEntity (); логический BFLAG = false; String fileName = multiplearTfile.getoriginalFilename (). ToString (); // 判断文件不为空 if (multipfile.getSize ()! = 0 &&! // 判断文件大小 if (multiplectfile.getSize () <= upload_maxsize) {bflag = true; // 文件类型判断 if (this.checkfiletype (имя файла)) {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 = новый файл (LogorealPathdir); if (! logosavefile.exists ()) {logosavefile.mkdirs (); } String name = filename.substring (0, fileName.lastIndexof (".")); System.out.println ("文件名称 :" + name); // 新的文件名 string newFilename = this.getName (имя файла); // 文件扩展名 string fileEnd = this.getFileext (fileName); // 绝对路径 string fiLENDAMEDIRS = LOGOREALPATHDIR + file.separator + newFilename + fileEnd; System.out.println ("保存的绝对路径 :" + filenedAmedirs); File filedirs = new File (fileedAmedirs); // 转入文件 try {multiplaartfile.transferto (filedirs); } catch (allodalStateException 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 = 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 (имя); Entity.SetTitLealter (NewFilename); TimeStamp TimeStamp = New TimeStamp (System.CurrentTimeMillis ()); Entity.SetUploadTime (TimeStamp); вернуть сущность; } 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; }} вернуть 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; }} вернуть false; } / ** * 视频类型判断 (avi) * * @param filename * @return * / private boolean checkavitype (string fileend) {iterator <string> type = arrays.aslist (allupavi) .iterator (); while (type.hasnext ()) {string ext = type.next (); if (fileend.equals (ext)) {return true; }} вернуть false; } / ** * 获取文件扩展名 * * @return String * / private String getFileext (String fileName) {return filename.substring (filename.lastIndexof (".")); } / ** * 依据原始文件名生成新文件名 * @return * / private string getName (string fileName) {iterator <string> type = arrays.aslist (alluntfiles) .iterator (); while (type.hasnext ()) {string ext = type.next (); if (filename.contains (ext)) {string newFilename = filename.substring (0, filename.lastIndexof (ext)); вернуть новое место; } } возвращаться ""; } / ** * 文件大小 , 返回 kb.mb * * @return * / private string getSize (файл файла) {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; }} Импорт java.io.bufferedReader; import java.io.ioexception; импорт java.io.inputStreamReader; import java.util.arraylist; import java.util.list; public class transfmediatool { /** * 视频转码 flv * * @param ffmpegpath * 转码工具的存放路径 @@param upfath 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 ideooprocess = new ProcessBuilder (преобразовать) .redireCterrorStream (true) .start (); New PrintStream (VideoProcess.getInputStream ()). start (); videoprocess.waitfor (); } catch (ioException e1) {e1.printstacktrace (); } catch (прерванное искусство e) {e.printstacktrace (); }} / ** * 对 ffmpeg 无法解析的文件格式 (wmv9 , rm , rmvb 等), 先用 mencoder 转换为 avi (ffmpeg 能解析的) 格式 * * @param mencoderpath * 转码工具的存放路径 * @param upfilepath * 用于指定要转换格式的文件, @paramavath * @@return mencoderpath, string upfilepath, string codcavipath) {// boolean flag = false; List <string> CHARF = NEW ARRAYLILD <STRIND> (); CHARD.Add (Mencoderpath); CHARD.Add (UpfilePath); CHARD.Add ("-OAC"); CHARFT.Add ("mp3lame"); CHARD.Add ("-Lameopts"); CHARD.ADD ("PRESET = 64"); CHARD.Add ("-Lavcopts"); CHARD.ADD ("ACODEC = MP3: ABITRATE = 64"); CHARD.Add ("-OVC"); CHARD.Add ("xvid"); CHARD.ADD ("-XVIDENCOPTS"); CHARD.Add ("bitrate = 600"); CHARD.Add ("-of"); CHARD.Add ("avi"); CHARD.Add ("-O"); CRAPT.Add (Codcavipath); try {// 预处理进程 ProcessBuilder Builder = new ProcessBuilder (); builder.command (похвалы); Builder.redireCterRorStream (True); // 进程信息输出到控制台 Process P = Builder.Start (); BufferedReader BR = новый BufferedReader (новый inputStreamReader (p.getInputStream ())); String line = null; while ((line = br.readline ())! = null) {System.out.println (line); } p.waitfor (); // 直到上面的命令执行完 , 才向下执行 return codcavipath; } catch (Exception e) {e.printstackTrace (); вернуть ноль; }}} класс 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); еще разрыв; }} catch (Exception e) {e.printstackTrace (); }}}实体类
импортировать java.sql.timestamp; public class fileElity {private String type; частный размер строки; частный путь строкости; частная строка Titleorig; частная строка TitLealter; частная временная лампа времени загрузки; public String getType () {return Type; } public void settype (type string) {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 (строка titleorig) {this.titleorig = titleorig; } public String getTitLealter () {return titLealter; } public void SettitLealter (строка TitLealter) {this.titLealter = titLealter; } public TimeStamp getUploadTime () {return uploadTime; } public void setUploadTime (время загрузки времени) {this.UploadTime = oploadTime; }}总结
以上所述是小编给大家介绍的 java 上传视频实例代码 希望对大家有所帮助 , 如果大家有任何疑问请给我留言 , 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!