使用cos.jar包實現文件上傳功能

我們經常做項目時要用到文件上傳功能,同時還要控制文件大小與文件類型,文件的重命名等功能;今天跟大家講解一下使用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" 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接口,代碼如下:

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.51cto.com/course/8010.html



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章