咱们常常作项目时要用到文件上传功能,同时还要控制文件大小与文件类型,文件的重命名等功能;今天跟你们讲解一下使用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