Java實現多個文件上傳(驗證文件大小、文件類型)

文件上傳是每個java開發者必須掌握的。文件上傳有很多種實現方式,但其實也大同小異。筆人在這裏爲大家介紹一種我習慣用的,上傳文件的方式。大家先看代碼,最後我會分享我的源碼給大家。

  • 1、首先要準備一下需要用到的jar包。
    • commons-fileupload-1.2.1.jar
      -commons-io-1.4.jar
      可以從[(http://commons.apache.org/)]下載,當然,我的項目源碼裏也有
      然後開始寫代碼。
public static String fileUpload(HttpServletRequest request,HttpServletResponse response)throws Exception
{
    //允許上傳的文件類型
    String fileType = "mp3,mp4,video,rmvb,pdf,txt,xml,doc,gif,png,bmp,jpeg";
    //允許上傳的文件最大大小(100M,單位爲byte)
    int maxSize = 1024*1024*100;
    response.addHeader("Access-Control-Allow-Origin", "*");
    //文件要保存的路徑
    String savePath = request.getRealPath("/") + "save/";
    response.setContentType("text/html; charset=UTF-8");
    //檢查目錄
    File uploadDir = new File(savePath);
    if ( !uploadDir.exists())
    {
       uploadDir.mkdirs();
    }
    if ( !uploadDir.canWrite())
    {
       return "上傳目錄沒有寫權限!";
    }
    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(1024 * 1024); //設置緩衝區大小,這裏是1M
    factory.setRepository(uploadDir); //設置緩衝區目錄

    ServletFileUpload upload = new ServletFileUpload(factory);
    upload.setHeaderEncoding("UTF-8");

    List items = upload.parseRequest(request);
    Iterator it = items.iterator();
    FileItem item = null;
    String fileName = "";
    String name = "";
    String extName = "";
    String newFileName = "";
    while (it.hasNext())
    {
        item = (FileItem)it.next();

        fileName = item.getName();
        if (null == fileName || "".equals(fileName))
        {
            continue;
        }

        //判斷文件大小是否超限
        if (item.getSize() > maxSize)
        {
            item.delete();
            JOptionPane.showMessageDialog(null, "文件大小超過限制!應小於" + maxSize
                                                / 1024 / 1024 + "M");
            return "文件大小超過限制!應小於" + maxSize;
        }

        //判斷文件類型是否匹配
        //            System.getProperties().getProperty("file.separator"))
        //獲取文件名稱
        name = fileName.substring(fileName.lastIndexOf("\\") + 1,
            fileName.lastIndexOf("."));
        //獲取文件後綴名
        extName = fileName.substring(fileName.indexOf(".") + 1).toLowerCase().trim();

        //判斷是否爲允許上傳的文件類型
        if ( !Arrays.<String> asList(fileType.split(",")).contains(extName))
        {
            item.delete();
            JOptionPane.showMessageDialog(null, "文件類型不正確,必須爲" + fileType
                                                + "的文件!");
            return "文件類型不正確,必須爲" + fileType
                                                + "的文件!";
        }
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
        newFileName = name + df.format(new Date()) + "." + extName;
        File uploadedFile = new File(savePath, newFileName);
    item.write(uploadedFile);
    }

    return "success";
}
<form action="<%=basePath%>fileUpload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="file" name="file" />
    <input type="submit" value="上傳"> 
</form> 

上面代碼就已經ok了。我的一些參數是寫死的,比如允許文件上傳的大小,還有文件的類型。大家最好是寫在一個配置文件中,然後去讀取這個配置文件,得到裏面的參數。雖然配置文件裏的參數也是寫死,但是意義不同,作爲一個程序員你就是給別人提供方便的,不可能每次已改就要動裏面的代碼,只需要改配置文件就可以了。這也是需要我們做到智能化。

當然,上面代碼只是做到上傳的功能,下面我會分享我的源碼,源碼裏面就是寫在配置文件裏的,然後,如果上傳文件不符合要求,就將信息返回到前臺可視化顯示。

下面分享一下我的源碼:文件上傳

如果遇到問題大家可以互相交流、切磋!

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