咱們常常作項目時要用到文件上傳功能,同時還要控制文件大小與文件類型,文件的重命名等功能;今天跟你們講解一下使用cos.jar包來實現文件上傳與控制的功能吧。javascript
第一步:要把cos.jar文件拷貝到WEB-INF/lib文件夾html
第二步:建立上傳的jsp文件,upload.jsp,頁面的表單必須有以下2個屬性,而且值是固定的java
1.enctype="multipart/form-data"
2.method = "post"web
頁面完整代碼以下:tomcat
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <% 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 href="<%=basePath%>"> <title>上傳文件</title> <script type="text/javascript"> function check(){ var filename = form1.File1.value; if(filename==""){ alert("請選擇要上傳的文件"); return false; } //獲取點號(.)所在的位置下標; var pos = filename.indexOf('.')+1; if(pos>0){ //獲取擴展名 filename = filename.substring(pos,filename.length); if(filename !='jpg' && filename !='JPG' && filename !='jpeg' && filename !='JPEG' && filename !='gif' && filename !='GIF' && filename !='png' && filename !='PNG'&& filename !='png' && filename !='avi'){ alert("只支持上傳jpg,png,gif圖片"); return false; } } filename = form1.File2.value; pos = filename.indexOf('.')+1; if(pos>0){ //獲取擴展名 filename = filename.substring(pos,filename.length); if(filename !='jpg' && filename !='JPG' && filename !='jpeg' && filename !='JPEG' && filename !='gif' && filename !='GIF' && filename !='png' && filename !='PNG'&& filename !='png' && filename !='avi'){ alert("只支持上傳jpg,png,gif圖片"); return false; } } return true; } </script> </head> <body> <c:if test="${msg !=null}"> <h2 align="center"><font color="red">${msg }</font></h2> <hr/> </c:if> <form name="form1" enctype="multipart/form-data" method = "post" action = "uploadServlet" onsubmit="return check();"> <input type="text" name="userName" /> <p>上傳文件1:<input type = "file" name = "File1" size = "20" maxlength = "20"><br></p> <p>上傳文件2:<input type = "file" name = "File2" size = "20" maxlength = "20"><br></p> <input type = "submit" value = "上傳"> </form> </body> </html>
第三步:FileRenameUtil改類主要功能是對文件進行重命名,該類必須實現FileRenamePolicy接口,代碼以下:dom
package upload; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; import com.oreilly.servlet.multipart.FileRenamePolicy; public class FileRenameUtil implements FileRenamePolicy { public File rename(File file) { String body = ""; String ext = ""; Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss"); //14842908.55999.jpg int pot = file.getName().lastIndexOf(".");//取得文件名和後綴分割點 if (pot != -1) {//說明後綴存在 // body = date.getTime() + "";//採用時間的形式命名 body = sdf.format(date); ext = file.getName().substring(pot);//截取後綴名 } else { body = (new Date()).getTime() + ""; ext = ""; } Random rand = new Random(); int rnd = Math.abs(rand.nextInt(9000))+1000; String newName = body +rnd + ext; file = new File(file.getParent(), newName);//對文件進行重命名 return file; } }
第四步:建立文件上傳的servlet,實現文件上傳jsp
package upload; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.oreilly.servlet.MultipartRequest; public class UploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 保存文件的路徑,必須是tomcat裏面當前項目下的子路徑 String filePath = getServletContext().getRealPath("/") + "upload"; System.out.println(filePath);//輸出存放上傳文件所到的路徑 File uploadPath = new File(filePath); // 檢查文件夾是否存在 不存在 建立一個 if (!uploadPath.exists()) { //建立文件夾 uploadPath.mkdir(); } // 文件最大容量 3M int fileMaxSize = 3 * 1024 * 1024; // 存放文件描述 @SuppressWarnings("unused") String[] fileDiscription = { null, null }; // 文件名 String fileName = null; // 上傳文件數 int fileCount = 0; // 重命名策略 FileRenameUtil rfrp = new FileRenameUtil(); // 上傳文件 MultipartRequest mulit =null; try{ mulit = new MultipartRequest(request, filePath, fileMaxSize, "UTF-8", rfrp);//取得上傳文件 }catch(Exception e){ request.setAttribute("msg", "上傳文件的大小不能超過3M"); getServletContext().getRequestDispatcher("/T13/upload.jsp").forward(request, response); return; } //獲取普通控件的值,不能使用request對象 String userName = mulit.getParameter("userName"); System.out.println(userName); PrintWriter out = response.getWriter(); response.setContentType("text/html;charset=utf-8"); Enumeration filesname = mulit.getFileNames();//取得上傳的全部文件(至關於標識) while (filesname.hasMoreElements()) { //控件名稱 String name = (String) filesname.nextElement();//標識 System.out.println(name); fileName = mulit.getFilesystemName(name); //取得文件名 String contentType = mulit.getContentType(name);//工具標識取得的文件類型 if (fileName != null) { fileCount++; } System.out.println("文件名:" + fileName); System.out.println("文件類型: " + contentType); //在頁面顯示上傳成功的圖片 out.println("<img src='upload/"+fileName+"' />"); } System.out.println("共上傳" + fileCount + "個文件!"); out.close(); } }
本人從事軟件項目ide
講師課堂連接:https://edu.51cto.com/lecturer/8307455.htmlpost
若是想更詳細全面的學習jsp課程,能夠看看個人JSP從入門到精通+在線視頻教育平臺的視頻課程:http://edu.51cto.com/course/8010.html