使用cos.jar包实现文件上传功能

xiaoxiao2021-02-28  99

我们经常做项目时要用到文件上传功能,同时还要控制文件大小与文件类型,文件的重命名等功能;今天跟大家讲解一下使用cos.jar包来实现文件上传与控制的功能吧。

第一步:要把cos.jar文件拷贝到WEB-INF/lib文件夹

第二步:创建上传的jsp文件,upload.jsp,页面的表单必须有如下2个属性,并且值是固定的

1.enctype="multipart/form-data" 2.method = "post"

页面完整代码如下:

<%@ 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" οnsubmit="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接口,代码如下

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,实现文件上传

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();          } }

本人从事软件项目开发20年,10年的Java工程师系列课程的教学工作,录制30多门精品视频课程,每门课程都包含有项目实战,上课PPT,及完整的源代码下载,有兴趣的朋友可以看看我的在线课堂,如果想更详细全面的学习jsp课程,可以看看我的JSP从入门到精通+在线视频教育平台视频课程:http://edu.csdn.net/course/detail/3462

转载请注明原文地址: https://www.6miu.com/read-70885.html

最新回复(0)