天天看點

使用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%>" target="_blank" rel="external nofollow" >

    <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