页面:
上传文件时的关键词: 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+"/";%> <! 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 = "keyword1, keyword2, keyword3"> <meta http-equiv = "คำอธิบาย" content = "นี่คือหน้าของฉัน"> </head> <body> <body> <divel enctype = "multipart/form-data"> <div align = "center"> <div> 文件上传 <ประเภทอินพุต = "ไฟล์" ชื่อ = "ไฟล์" id = "ไฟล์"> <br> <อินพุตประเภท = "ส่ง" value = "上传"> </div> </div>
后台:
ผู้ควบคุม
นำเข้า javax.servlet.http.htttservletrequest; นำเข้าโมเดล fileentity นำเข้า org.springframework.stereotype.controller; นำเข้า org.springframework.ui.modelmap; org.springframework.web.bind.annotation.requestmethod; นำเข้า org.springframework.web.bind.annotation.requestparam; นำเข้า org.springframework.web.bind.annotation.responsebody; org.springframework.web.servlet.modelandview;@controller@requestmapping ("/uploadflv") คลาสสาธารณะ UploadController {@requestmapping (value = "/upload", method = {requestmethod.post, requestmethod.get} MultipartFile MultipArtFile, HttpServletRequest, แผนที่ modelmap) {String message = ""; fileEntity entity = new fileEntity (); fileUploadTool fileUploadTool = ใหม่ filePloadTool (); ลอง {entity = fileuploadtool.createFile (MultipartFile, คำขอ); if (entity! = null) {// service.savefile (เอนทิตี); ข้อความ = "上传成功"; map.put ("เอนทิตี", เอนทิตี); map.put ("ผลลัพธ์", ข้อความ); } else {message = "上传失败"; map.put ("ผลลัพธ์", ข้อความ); }} catch (exception e) {e.printstacktrace (); } ส่งคืน modelandview ใหม่ ("ผลลัพธ์", แผนที่); -工具类
นำเข้า java.io.file; นำเข้า java.io.ioException; นำเข้า java.sql.timestamp; นำเข้า java.text.decimalformat; นำเข้า java.util.arrays; นำเข้า java.util.iterator; นำเข้า javax.servlet.http.httpservlet org.springframework.web.multipart.multipartfile; ไฟล์ระดับสาธารณะ FilePloadTool {transfmediatool transfmediatool = new transfmediatool (); // 文件最大 500m ส่วนตัวคงที่ upload_maxsize = 800 * 1024 * 1024; // 文件允许格式สตริงสแตติกส่วนตัว [] allowfiles = {".rar", ".doc", ".docx", ".zip", ".pdf", ".txt", ".swf", ".xlsx", ". gif", ".png" ".flv", ".ppt", ".avi", ".mpg", ".wmv", ".3gp", ".mov", ".asf", ".asx", ".vob", ".wmv9", ".rm", ".rmvb"}; // 允许转码的视频格式( ffmpeg) สตริงคงที่ส่วนตัว [] allowflv = {".avi", ".mpg", ".wmv", ".3gp", ".mov", ".asf", ".asx", ".vob"}; // 允许的视频转码格式 (mencoder) สตริงคงที่ส่วนตัว [] allowavi = {".wmv9", ".rm", ".rmvb"}; Public FileEntity CreateFile (MultipartFile MultipArtFile, httpservletRequest Request) {fileEntity entity = new fileEntity (); บูลีน bflag = false; Filename String = multipartFile.getoriginalfilename (). toString (); // 判断文件不为空ถ้า (multipartfile.getSize ()! = 0 &&! multipartFile.isEmpty ()) {bflag = true; // 判断文件大小ถ้า (multipartfile.getSize () <= upload_maxsize) {bflag = true; // 文件类型判断ถ้า (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 = ไฟล์ใหม่ (logoreAlAthDir); if (! logosavefile.exists ()) {logosavefile.mkdirs (); } string name = filename.substring (0, filename.lastindexof (".")); System.out.println ("文件名称:" + ชื่อ); // 新的文件名สตริง newFileName = this.getName (ชื่อไฟล์); // 文件扩展名สตริง fileend = this.getFileExt (ชื่อไฟล์); // 绝对路径สตริง fileenamedirs = logoRealAthdir + file.Sparator + newFileName + fileend; System.out.println ("保存的绝对路径:" + filenamedirs); ไฟล์ filedirs = ไฟล์ใหม่ (filenamedirs); // 转入文件ลอง {multipartfile.transferto (filedirs); } catch (unlueLstateException e) {e.printStackTrace (); } catch (ioexception e) {e.printstacktrace (); } // 相对路径 entity.setType (fileend); String fileDir = logopathdir + newfilename + feelend; StringBuilder builder = new StringBuilder (filedir); สตริง finalfiledir = builder.substring (1); // ขนาด存储为สตริงขนาด = this.getSize (FileDirs); // 源文件保存路径 string avipath = filedirs.getabsolutepath (); // 转码 avi // boolean flag = false; if (this.checkavitype (fileend)) {// 设置转换为 avi 格式后文件的保存路径สตริง codcavipath = logoRealPathdir + file.Separator + newfilename + ".avi"; // 获取配置的转换工具( mencoder.exe) 的存放路径 String mencoderpath = request.getSession (). getServletContext (). getRealPath ("/เครื่องมือ/mencoder.exe"); avipath = transfmediatool.processavi (mencoderpath, filedirs.getabsolutepath (), codcavipath); fileend = this.getFileExt (codcavipath); } if (avipath! = null) {// 转码 flv if (this.checkmediatype (fileend)) {ลอง {// 设置转换为 flv 格式后文件的保存路径สตริง codcfilepath = logoRealApthdir + file.Sparator + newfilename + ".flv"; // 获取配置的转换工具( ffmpeg.exe) 的存放路径สตริง ffmpegpath = request.getSession (). getServletContext (). getRealPath ("/เครื่องมือ/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 (ขนาด); entity.setPath (finalfiledir); entity.settitleorig (ชื่อ); entity.settitlealter (newfilename); timestamp timestamp = timestamp ใหม่ (System.currentTimeMillis ()); entity.setUploadTime (การประทับเวลา); เอนทิตีกลับ; } else {return null; }} else {return null; }} / ** * 文件类型判断 * * @param filename * @return * / private boolean checkFileType (ชื่อไฟล์สตริง) {iterator <string> type = array.aslist (lewalfiles) .Iterator (); ในขณะที่ (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 = array.aslist (lewelflv) .Iterator (); ในขณะที่ (type.hasnext ()) {string ext = type.next (); if (fileend.equals (ext)) {return true; }} return false; } / ** * 视频类型判断 (avi) * * @param filename * @return * / private boolean checkavitype (สตริง fileend) {iterator <string> type = array.aslist (อนุญาตให้ใช้) .Iterator (); ในขณะที่ (type.hasnext ()) {string ext = type.next (); if (fileend.equals (ext)) {return true; }} return false; } / ** * 获取文件扩展名 * * @return string * / สตริงส่วนตัว getFileext (ชื่อสตริงไฟล์) {return filename.substring (filename.lastindexof (".")); } / ** * 依据原始文件名生成新文件名 * @return * / สตริงส่วนตัว getName (ชื่อไฟล์สตริง) {iterator <string> type = array.aslist (lewalfiles) .Iterator (); ในขณะที่ (type.hasnext ()) {string ext = type.next (); if (filename.contains (ext)) {string newfilename = filename.substring (0, filename.lastindexof (ext)); ส่งคืน Newfilename; } } กลับ ""; } / ** * 文件大小, 返回 kb.mb * * @return * / สตริงส่วนตัว getsize (ไฟล์ไฟล์) {string size = ""; Long Filelength = file.length (); DecimalFormat df = decimalformat ใหม่ ("#. 00"); if (filelength <1024) {size = df.format ((สองเท่า) filelength) + "bt"; } อื่นถ้า (filelength <1048576) {size = df.format ((สองเท่า) filelength / 1024) + "kb"; } อื่นถ้า (filelength <1073741824) {size = df.format ((สองเท่า) Filelength / 1048576) + "MB"; } else {size = df.format ((สองเท่า) Filelength / 1073741824) + "GB"; } ขนาดคืน; }} นำเข้า java.io.bufferedreader; นำเข้า java.io.ioException; นำเข้า java.io.inputStreamreader; นำเข้า java.util.arraylist; นำเข้า java.util.list; codcFilePath * 格式转换后的的文件保存路径 * @return * @throws Exception */ processflv processflv (สตริง ffmpegpath, String upfilepath, สตริง codcfilepath) {// 创建一个 list 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); ลอง {process videoprocess = processbuilder ใหม่ (แปลง) .redirecterRorStream (จริง) .start (); ใหม่ 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 * 用于指定要转换格式的文件, 要截图的视频源文件MencoderPath, String UpfilePath, String codcavipath) {// boolean flag = false; รายการ <String> คำสั่ง = arrayList ใหม่ <String> (); Commend.add (Mencoderpath); commend.add (upfilepath); commend.add ("-oac"); permend.add ("mp3lame"); Commend.add ("-lameopts"); commend.add ("preset = 64"); commend.add ("-lavcopts"); commend.add ("acodec = mp3: abitrate = 64"); commend.add ("-ovc"); permend.add ("xvid"); commend.add ("-xvidencopts"); commend.add ("bitrate = 600"); Commend.add ("-จาก"); permend.add ("avi"); Commend.add ("-O"); permend.add (codcavipath); ลอง {// 预处理进程 processBuilder builder = processBuilder ใหม่ (); Builder.Command (ยกย่อง); Builder.redirecterRorStream (จริง); // 进程信息输出到控制台กระบวนการ p = builder.start (); bufferedReader br = new bufferedReader (ใหม่ inputStreamReader (P.GetInputStream ())); สตริงบรรทัด = null; ในขณะที่ ((line = br.readline ())! = null) {system.out.println (บรรทัด); } p.waitfor (); // 直到上面的命令执行完, 才向下执行ส่งคืน codcavipath; } catch (exception e) {e.printstacktrace (); คืนค่า null; }}} คลาส printstream ขยายเธรด {java.io.InputStream __is = null; Public PrintStream (java.io.InputStream คือ) {__is = IS; } โมฆะสาธารณะเรียกใช้ () {ลอง {ในขณะที่ (นี่! = null) {int _ch = __is.read (); if (_ch! = -1) system.out.print ((ถ่าน) _ch); แตกอื่น; }} catch (exception e) {e.printstacktrace (); -实体类
นำเข้า java.sql.timestamp; คลาสสาธารณะ FileEntity {ประเภทสตริงส่วนตัว; ขนาดสตริงส่วนตัว เส้นทางสตริงส่วนตัว สตริงส่วนตัว titleorig; สตริงส่วนตัว titlealter; เวลาอัปโหลดเวลาส่วนตัว สตริงสาธารณะ getType () {ประเภทกลับ; } โมฆะสาธารณะ setType (ประเภทสตริง) {this.type = type; } สตริงสาธารณะ getSize () {ขนาดคืน; } โมฆะสาธารณะ setsize (ขนาดสตริง) {this.size = size; } สตริงสาธารณะ getPath () {เส้นทางกลับ; } โมฆะสาธารณะ setPath (เส้นทางสตริง) {this.path = path; } สตริงสาธารณะ getTitleOrig () {return titleorig; } โมฆะสาธารณะ SetTitleOrig (String titleorig) {this.titleOrig = titleorig; } สตริงสาธารณะ getTitlealter () {return titlealter; } โมฆะสาธารณะ SettitLealter (String TitleAlter) {this.titLealter = TitleAlter; } timestamp สาธารณะ getUploadTime () {return uploadtime; } โมฆะสาธารณะ setupLoadTime (timestamp uploadtime) {this.uploadtime = uploadtime; -总结
以上所述是小编给大家介绍的 Java 上传视频实例代码, 希望对大家有所帮助, 如果大家有任何疑问请给我留言, 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!