1. 程式人生 > >文件大小限制

文件大小限制

spa 控制 字符編碼 file 安全性 con 文件寫入 cee sys

上傳的文件不能太大,因此要對文件大小做一定的限制。

限制單個文件的大小:

1 sfu.setFileSizeMax(1024 * 10);//10K

限制所有文件的總大小:

1 sfu.setSizeMax(1024 * 30);

具體示例代碼:

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //設置字符編碼
        //能控制文件名字的中文編碼,但是不能控制普通字段的中文亂碼
request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //設置返回的內容類型 response.setContentType("text/html;charset=UTF-8"); //創建接收文件的工廠類 DiskFileItemFactory factory = new DiskFileItemFactory(); //創建文件解析對象 ServletFileUpload sfu = new
ServletFileUpload(factory); //設置解析request請求的編碼方式 // sfu.setHeaderEncoding("UTF-8"); //設置上傳單個文件的大小,以byte為單位 sfu.setFileSizeMax(1024 * 10);//10K //設置所有文件的總大小 sfu.setSizeMax(1024 * 30); try { //解析request獲得表單中的每一文件項(包含普通文本域) List<FileItem> fiList = sfu.parseRequest(request);
//遍歷每一個文本項 for(FileItem fi : fiList){ //獲得原始文件名 String originalFilename = fi.getName(); //獲得字段名 String field = fi.getFieldName(); //是否是普通字段 //如果true,代表普通字段(a simple form field) //如果false,代表文件字段 boolean isFormField = fi.isFormField(); //判斷是否是文件字段 if(!isFormField){ if(field != null && !"".equals(field) ){ //生成文件名UUID,使文件名不會重復 String uuid = UUID.randomUUID().toString(); //獲得原始文件的後綴名 String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); //設置要上傳的目錄,如果是隱私的文件可以放在WEB-INF下來提高安全性 String uploadPath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload"); //創建文件對象 File file = new File(uploadPath,uuid+suffix);//參數:文件目錄,文件名 //把文件寫入硬盤 fi.write(file); } } else { System.out.println(fi.getString()); //手動轉換編碼 String content = fi.getString(); content = new String(content.getBytes("ISO8859-1"),"UTF-8"); System.out.println(content); } } //回寫結果 response.getWriter().print("文件上傳成功。"); } catch (Exception e) { //捕獲單個文件過大的異常 if(e instanceof FileSizeLimitExceededException){ response.getWriter().write("上傳失敗,單個文件過大。"); } //捕獲文件總大小的異常 if(e instanceof SizeLimitExceededException){ response.getWriter().write("文件總大小不能超過30KB"); } e.printStackTrace(); } }

文件大小限制