JSP檔案上傳(精簡乾貨)
阿新 • • 發佈:2018-12-12
1.前端程式碼
<form action="AddVedio" method="post" enctype="multipart/form-data"> <table> <tr> <td>*上傳視訊:</td> <td><input type="file" name="vname"></td> </tr> <tr> <td>*視訊封面:</td> <td><input type="file" name="vpic"> ->僅支援jpg,png格式圖片</td> </tr> <tr> <td>*視訊標題:</td> <td><input type="text" name="vrealtitle" class="input-text" placeholder="標題..."></td> </tr> <tr> <td>*視訊簡介:</td> <td><textarea name="vinfo" cols="28" rows="4" class="input-text" placeholder="簡介..."></textarea></td> </tr> <tr> <td>*視訊型別:</td> <td> <select name="vclass"> <option selected="selected">電影片段</option> <option>MV</option> </select> </td> </tr> <tr> <td colspan="2" id="fileupload"> <input type="submit" value="上傳" class="input-btn"> </td> </tr> <tr> <td colspan="2" id="fileupload"> <input type="reset" value="重置" class="input-btn"> </td> </tr> </table> </form>
*注意:enctype="multipart/form-data",若無這段程式碼後端將無法讀取視訊,圖片,音訊等檔案。
2.後端Java程式碼
- 需要匯入:commons-fileupload-1.3.3.jar和commons-io-2.6.jar
@WebServlet("/AddVedio") public class AddVedioServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //儲存檔案 //1.得到fileitem集合 DiskFileItemFactory factory =new DiskFileItemFactory(); factory.setSizeThreshold(1024*5); ServletFileUpload upload=new ServletFileUpload(factory); upload.setSizeMax(1024*1024*1024*2); List<FileItem> items=null; Vedio v=new Vedio(); try { items=upload.parseRequest(req); //2.便利items for (FileItem item : items) { //3.獲取表單上的輸入資訊 if(item.isFormField()) { String formname=item.getFieldName(); if(formname.equals("vinfo")) { if(item.getString("utf-8")==null) req.getRequestDispatcher("errorpage_500.jsp").forward(req, resp); v.setVinfo(item.getString("utf-8")); } if(formname.equals("vclass")) { if(item.getString("utf-8")==null) req.getRequestDispatcher("errorpage_500.jsp").forward(req, resp); v.setVclass(item.getString("utf-8")); } if(formname.equals("vrealtitle")) { if(item.getString("utf-8")==null) req.getRequestDispatcher("errorpage_500.jsp").forward(req, resp); v.setVrealtitle(item.getString("utf-8")); } }else { //視訊或圖片檔案 String fieldName=item.getFieldName(); String fileName=item.getName(); // String contentType=item.getContentType(); // long sizeInByte=item.getSize(); String basePath=req.getServletContext().getRealPath("/"); //根據字尾判斷圖片與視訊 String atsuffix=fileName.substring(fileName.lastIndexOf("."), fileName.length()); String suffix=atsuffix.substring(1,atsuffix.length()); //圖片 if(suffix.equalsIgnoreCase("jpg")||suffix.equalsIgnoreCase("png")) { InputStream in=item.getInputStream(); byte[] buffer=new byte[1024*1024*20]; int len=0; String s= String.valueOf(System.currentTimeMillis()); String t="eatvedioEatVEdIOEATveDIOeATvEdio"; String e=t.substring((int)(Math.random()*32), t.length()); String vediostring=e+s;//重新命名儲存,vname v.setVpicname(vediostring+"."+suffix); fileName=basePath+"vedios"+File.separator+"image"+File.separator+vediostring+"."+suffix; OutputStream out=new FileOutputStream(fileName); while((len=in.read(buffer))!=-1) { out.write(buffer, 0, len); } out.close(); in.close(); v.setVpic(fileName); }else if(suffix.equalsIgnoreCase("mp4")||suffix.equalsIgnoreCase("avi")) {//視訊檔案 InputStream in=item.getInputStream(); byte[] buffer=new byte[1024*1024*700]; int len=0; //重新命名 String s= String.valueOf(System.currentTimeMillis()); String t="EatVEdIOeAtVedioEaTvediOeATvEdio"; String e=t.substring((int)(Math.random()*32), t.length()); String vediostring=e+s; v.setVname(vediostring+"."+suffix); fileName=basePath+"vedios"+File.separator+"vediotemp"+File.separator+vediostring+"."+suffix; OutputStream out=new FileOutputStream(fileName); while((len=in.read(buffer))!=-1) { out.write(buffer, 0, len); } out.close(); in.close(); v.setVfile(fileName); }else { req.getRequestDispatcher("errorpage_500.jsp").forward(req, resp); } } } v.setVlastdate(getDate()); v.setVplaytimes(0); VediodaoImpl vdimp=new VediodaoImpl(); //4.將物件新增到資料庫 vdimp.addVedio(v); } catch (FileUploadException e) { e.printStackTrace(); } req.getRequestDispatcher("addsuccess.jsp?operate=addinfo").forward(req, resp); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } protected Date getDate() { Date time= new java.sql.Date(new java.util.Date().getTime()); return time; } }