Commons FileUpLoad 兩種上傳方式解


traditional API (傳統方式)

//上傳路徑
File file = new File("C:/upload");
//臨時文件路徑
File tempFile = new File("C:/uploadtemp");

if(!file.exists()) {
    file.mkdir();
}

if(!tempFile.exists()) {
    tempFile.mkdir();
}
//判斷 request 是一個文件上傳的 request
//通過 ServletFileUpload 類的靜態方法 isMultipartContent 來判斷
if(ServletFileUpload.isMultipartContent(request)) {
    //用 DiskFileItemFactory 創建新的 file items (只是臨時的)
    //DiskFileItemFactory 創建FileItem 實例,並保存其內容在<b>內存</b>或者<b>硬盤中</b>
    //通過一個閥值來決定這個 FileItem 實例是存放在<b>內存</b>或者<b>硬盤中</b>
    DiskFileItemFactory factory = new DiskFileItemFactory();
    //設置閥值大小
    //不設置的話,默認10k
    //超過這個閥值,FileItem將直接寫入到磁盤
    factory.setSizeThreshold(1024*10);
    //設置臨時文件夾
    //不設置,默認為系統默認Temp文件路徑,調用 System.getProperty("java.io.tmpdir") 獲取
    //超過閥值的 FileItem 實例將存放在這個目錄中
    factory.setRepository(tempFile);
    //構造servletFileUpload 的實例,該實例提供工廠模式創建FileItem的DiskFileItemFactory實例
    ServletFileUpload fileUpload = new ServletFileUpload(factory);
    //設置一個<b>完整的請求</b>允許的最大大小(注意是完整請求,包括非file類型的表單,比如Text類型)
    fileUpload.setSizeMax(10*1024*1024);
    //設置所允許的最大的單個上傳文件大小(對應一個FileItem對象)
    //fileUpload.setFileSizeMax(10*1024*1024);

    try {
        //每一個FileItem 對應一個 request 請求中from表單中的 input 元素
        //解析 request 請求,將request中提交的值存入List數組
        List<FileItem> items = fileUpload.parseRequest(request);

        for(FileItem item : items) {
            //是不是一個文件上傳組件
            if(!item.isFormField()) {
                String name = item.getName();
                System.out.println("name:" + name);
                System.out.println("length:" + item.getSize());
                item.write(new File("C:/upload/"+name));
            } else {
                String desc = item.getString("UTF-8");
                System.out.println("文件描述:" + desc);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
} else {
    throw new RuntimeException("請設置form表單的enctype屬性");
}

Streaming API

//設置文件上傳路徑
String UploadFilePath = "d:/upload";
//限制文件大小
//通過 request.getHeader("Content-Length") 獲取request 請求內容長度來限制
if(ServletFileUpload.isMultipartContent(request)) {

    //創建ServletFileUpload實例
    ServletFileUpload upload = new ServletFileUpload();
    try {
        //解析request 請求 並返回FileItemStream 的iterator 實例
        FileItemIterator iter = upload.getItemIterator(req);
        while (iter.hasNext()) {
            FileItemStream item = iter.next();
            String name = item.getFieldName();
            InputStream stream = item.openStream();
            if (item.isFormField()) {
                System.out.println("Form field " + name + " with value "
                        + Streams.asString(stream) + " detected.");
            } else {
                System.out.println("File field " + name + " with file name "
                        + item.getName() + " detected.");
                // Process the input stream
                //System.out.println(Streams.asString(stream));
                System.out.println("shuru:");
                String filename = new Scanner(System.in).next();
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(new File("e:/upload"),"ez.zip")));
                BufferedInputStream bis = new BufferedInputStream(stream);
                byte[] buffer = new byte[1024];
                int len = -1;
                while (-1 != (len = bis.read(buffer))){
                    bos.write(buffer,0,len);
                }
                bis.close();
                bos.flush();
                bos.close();

                PrintWriter out = resp.getWriter();
                out.write("完成");
                System.out.println("wanchengle ");
            }
        }
    } catch (FileUploadException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
} else {
    throw new RuntimeException("請設置form表單的enctype屬性");
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM