页面 :
上传文件时的关键词 : Enctype = "multipart/form-data"
<%@ página lenguaje = "java" import = "java.util.*" pageEncoding = "utf-8"%> <%string path = requit.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 = "nofollow externo"> <title> 上传视频 </title> <meta http-equiv = "pragma" content = "no-cache"> <meta http-equiv = "cache-confontrol" content = "no-cache"> <meta http-equiv = "expirea" contenido = "0"> <meta http-equiv = "keylalswords" keylals " Content = "Keyword1, Keyword2, Keyword3"> <meta http-equiv = "Descripción" Content = "Esta es mi página"> </head> <body> <div> <div> <divy <div align = "center"> <h1> 文件上传 </h1> </div> <hr> <form de formular id = "cargue" método = "acción" acción = "uploadflv/upload.DO" do " enctype = "multipart/form-data"> <div align = "center"> <div> 文件上传 <input type = "file" name = "file" id = "file"> <br> <input type = "subt" value = "上传"> </div> </div> </form> </div> </div> </body> </html>
后台 :
controlador
import javax.servlet.http.httpservletRequest; import model.fileEntity; import org.springframework.stereotype.controller; import org.springframework.ui.modelmap; import org.springfframework.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 og.springframework.web.multultipart.multult; org.springframework.web.servlet.modelandview;@controler@requestmapping ("/uploadflv") public class uploadController {@RequestMapping (valor = "/upload", método = {requestMethod.post, requestMethod.get}) @ResponseBody public Model y View uplow (@Request Param (value = ", requirió" Multipartfile multipartfile, httpservletRequest solicitud, mapsmap map) {string mensaje = ""; FileEntity entity = new FileEntity (); FileUploadTool fileUploadTool = new FileUploadTool (); intente {entity = fileUploadTool.CreateFile (multipartfile, request); if (entity! = null) {// service.saveFile (entidad); mensaje = "上传成功"; map.put ("entidad", entidad); map.put ("resultado", mensaje); } else {mensaje = "上传失败"; map.put ("resultado", mensaje); }} catch (Exception e) {E.PrintStackTrace (); } return New ModelAndView ("Resultado", 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.fileentity; importar; importar; importar javax.servlet.http.httpservletRequest; import.fileentity; importar; importar; importar javax.servlet.http.httpservletRequest; import.fileentity; importar; import org.springframework.web.multipart.multipartfile; public class FileUploadTool {TransfMediatool Transfmediatool = new TransfMediatool (); // 文件最大 500m estático privado Long upload_maxsize = 800 * 1024 * 1024; // 文件允许格式 cadena estática privada [] DESKFILES = {".Rar", ".doc", ".docx", ".zip", ".pdf", ".txt", ".swf", ".xlsx", ".gif", ".png", ".jpg", ".jpeg", ".bmp", ".xls". ".flv", ".ppt", ".avi", ".mpg", ".wmv", ".3gp", ".mov", ".asf", ".asx", ".vob", ".wmv9", ".rm", ".rmvb"}; // 允许转码的视频格式( ffmpeg) cadena estática privada [] tampsflv = {".avi", ".mpg", ".wmv", ".3gp", ".mov", ".asf", ".aSX", ".vob"}; // 允许的视频转码格式 (mencoder) cadena estática privada [] teawavi = {".wmv9", ".rm", ".rmvb"}; Public FileEntity CreateFile (multipartfile multipartFile, httpservletRequest solicitud) {fileEntity entity = new FileEntity (); booleano bflag = falso; String filename = multipartFile.getOriginalFileName (). ToString (); // 判断文件不为空 if (multipartFile.getSize ()! = 0 &&! MultipartFile.isEmpty ()) {bflag = true; // 判断文件大小 if (multipartFile.getSize () <= upload_maxsize) {bflag = true; // 文件类型判断 if (this.checkfileType (nombre de archivo)) {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"; Archivo logoSaveFile = nuevo archivo (logorealPathDir); if (! logoSaveFile.Exists ()) {logoSaveFile.mkDirs (); } Name de cadena = filename.substring (0, filename.lastIndexOf (".")); System.out.println ("文件名称 :" + nombre); // 新的文件名 String newFileName = this.getName (FileName); // 文件扩展名 cadena fileend = this.getFileExt (nombre de archivo); // 绝对路径 cadena filenamedirs = logorealPathDir + file.separator + newfileName + fileend; System.out.println ("保存的绝对路径 :" + Filenamedirs); Archivo FileDirs = nuevo archivo (filenamedirs); // 转入文件 try {multipartFile.transferto (fileDirs); } catch (ilegalStateException e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); } // 相对路径 entity.settype (fileend); String FileDir = LogopathDir + NewFileName + FileEnd; StringBuilder Builder = new StringBuilder (FileDir); Cadena finalfiledir = builder.substring (1); // tamaño 存储为 string string size = this.getSize (FileDirs); // 源文件保存路径 String avipath = filedirs.getabsolutePath (); // 转码 avi // bandera booleana = falso; if (this.checkavitype (fileend)) {// 设置转换为 avi 格式后文件的保存路径 string codcavipath = logorealPathDir + file.separator + newFileName + ".Avi"; // 获取配置的转换工具( Mencoder.exe )的存放路径 String mencoderPath = request.getSession (). 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 (). transfmediatool.processflv (ffmpegpath, avipath, codcfilepath); FileDir = logoPathdir + newFileName + ".flv"; builder = new StringBuilder (FileDir); finalfiledir = builder.substring (1); } catch (Exception e) {E.PrintStackTrace (); }} entity.setsize (tamaño); entity.setPath (finalfiledir); entity.settitleorig (nombre); entity.settitlealter (newFileName); TimeStamp TimestAMP = nueva marca de tiempo (System.CurrentTimemillis ()); entity.setuploadtime (marca de tiempo); entidad de retorno; } else {return null; }} else {return null; }} / ** * 文件类型判断 * * @param nombre de archivo * @return * / private boolean checkFileType (String fileName) {iterator <String> type = arrays.aslist (diseñador) .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 (teaTflv) .Iterator (); while (type.hasnext ()) {string ext = type.next (); if (fileend.equals (ext)) {return true; }} return false; } / ** * 视频类型判断 (avi) * * @param nombre de archivo * @return * / private boolean checkavitype (string fileEnd) {iterator <String> type = arrays.aslist (pEtingAvi) .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 (iLodfiles) .Iterator (); while (type.hasnext ()) {string ext = type.next (); if (filename.contains (ext)) {string newFileName = filename.substring (0, filename.lastindexof (ext)); devolver newfileName; } } devolver ""; } / ** * 文件大小 , 返回 Kb.mb * * @return * / private string getSize (archivo archivo) {string size = ""; long filelength = file.length (); DecimalFormat df = new DecimalFormat ("#. 00"); if (fileLength <1024) {size = df.format ((doble) filel longitud) + "bt"; } else if (fileLength <1048576) {size = df.format ((doble) filel longitud / 1024) + "kb"; } else if (fileLength <1073741824) {size = df.format ((doble) fileLength / 1048576) + "mb"; } else {size = df.format ((doble) Filelength / 1073741824) + "gb"; } tamaño de retorno; }} 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 ffmpegpath * @ * @param upfilepath * 用于指定要转换格式的文件, 要截图的视频源文件 要截图的视频源文件 @param ffmpegat 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"); convertir.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); Pruebe {Process VideoProcess = New ProcessBuilder (convertir) .REDIRECTERRORRSTREAM (true) .Start (); nuevo 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 * 格式转换后的的文件保存路径 @@thtreenn. MencoderPath, String UpFilePath, String CodCavipath) {// Boolean Flag = false; List <String> recomendar = new ArrayList <String> (); recomendar.add (Mencoderpath); recomendar.Add (Upfilepath); felicidad.Add ("-OAC"); comodio.add ("mp3lame"); comodio.add ("-Lameopts"); felicidad.Add ("preet = 64"); felicidad.Add ("-Lavcopts"); felicidad.Add ("acodec = mp3: abitrate = 64"); comodio.add ("-ovc"); comodio.add ("xvid"); comodio.add ("-xvidencopts"); felicidad.Add ("bitRate = 600"); felicidad.Add ("-de"); comodio.add ("avi"); comodio.add ("-o"); felicidad.Add (CodCavipath); intente {// 预处理进程 ProcessBuilder Builder = new ProcessBuilder (); Builder.command (recomendar); Builder.RedirErterrorStream (verdadero); // 进程信息输出到控制台 proceso p = builder.start (); BufferedReader BR = New BufferedReader (nuevo InputStreamReader (p.getInputStream ())); Línea de cadena = nulo; while ((línea = br.readline ())! = null) {system.out.println (línea); } p.waitfor (); // 直到上面的命令执行完 , 才向下执行 return CodCavipath; } catch (Exception e) {E.PrintStackTrace (); regresar nulo; }}} La clase printStream extiende el hilo {java.io.inputstream __is = null; public printstream (java.io.inputstream es) {__is = is; } public void run () {try {while (this! = null) {int _ch = __is.read (); if (_ch! = -1) System.out.print ((char) _ch); de lo contrario rompe; }} catch (Exception e) {E.PrintStackTrace (); }}}实体类
import java.sql.timestamp; public class FileEntity {private String Type; tamaño de cadena privada; ruta de cadena privada; Cadena privada titleorig; Titlealter de cadena privada; Tiempo de tiempo privado de la marca de tiempo; public String getType () {Tipo de retorno; } public void settype (tipo de cadena) {this.type = type; } cadena pública getSize () {size de retorno; } public void setSize (tamaño de cadena) {this.size = size; } public String getPath () {ruta de retorno; } public void setPath (ruta de cadena) {this.path = ruta; } 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 Tloadtime; } public void setUploadTime (TimeStamp Loadtime) {this.uploadtime = uploadtime; }}总结
以上所述是小编给大家介绍的 java 上传视频实例代码 , 希望对大家有所帮助 如果大家有任何疑问请给我留言 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持! 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!