文件上傳Apache


    Map<String, Object> rtnMap = new HashMap<String, Object>();
        // 獲取文件
        String tempPath = request.getSession().getServletContext().getRealPath("/temp");
        File tmpFile = new File(tempPath);
        // 消息提示
        try {
            // 使用Apache文件上傳組件處理文件上傳步驟:
            // 1、創建一個DiskFileItemFactory工廠
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // 設置工廠的緩沖區的大小,當上傳的文件大小超過緩沖區的大小時,就會生成一個臨時文件存放到指定的臨時目錄當中。
            factory.setSizeThreshold(1024 * 100);// 設置緩沖區的大小為100KB,如果不指定,那么緩沖區的大小默認是10KB
            // 設置上傳時生成的臨時文件的保存目錄
            factory.setRepository(tmpFile);
            // 2、創建一個文件上傳解析器
            ServletFileUpload upload = new ServletFileUpload(factory);
            // 解決上傳文件名的中文亂碼
            upload.setHeaderEncoding("UTF-8");
            // 3、判斷提交上來的數據是否是上傳表單的數據
            if (!ServletFileUpload.isMultipartContent(request)) {
                // 按照傳統方式獲取數據
                rtnMap.put("code", "-1");
                rtnMap.put("msg", "導入失敗,請選擇上傳文件!");
                return rtnMap;
            }
            // 設置上傳單個文件的大小的最大值,目前是設置為1024*1024字節,也就是1MB
            upload.setFileSizeMax(1024 * 1024);
            // 設置上傳文件總量的最大值,最大值=同時上傳的多個文件的大小的最大值的和,目前設置為10MB
            upload.setSizeMax(1024 * 1024 * 10);
            // 4、使用ServletFileUpload解析器解析上傳數據,解析結果返回的是一個List<FileItem>集合,每一個FileItem對應一個Form表單的輸入項
            MultipartFile item = ((MultipartHttpServletRequest) request).getFile("fileExl");
            if (item.getSize() > 1024 * 1024) {
                rtnMap.put("code", "-1");
                rtnMap.put("msg", "導入失敗,您上傳的文件過大,單個文件不能超過1M!");
                return rtnMap;
            }
            String filename = item.getOriginalFilename();
            logger.info(filename);
            if (filename == null || filename.trim().equals("")) {
                rtnMap.put("code", "-1");
                rtnMap.put("msg", "導入失敗,請選擇上傳文件!");
                return rtnMap;
            }
            // 注意:不同的瀏覽器提交的文件名是不一樣的,有些瀏覽器提交上來的文件名是帶有路徑的,如:
            // c:\a\b\1.txt,而有些只是單純的文件名,如:1.txt
            // 處理獲取到的上傳文件的文件名的路徑部分,只保留文件名部分
            filename = filename.substring(filename.lastIndexOf("/") + 1);
            // 得到上傳文件的擴展名
            String fileExtName = filename.substring(filename.lastIndexOf(".") + 1);
            // 如果需要限制上傳的文件類型,那么可以通過文件的擴展名來判斷上傳的文件類型是否合法
            logger.info("上傳的文件的擴展名是:" + fileExtName);
            final String[] CONTACT_ALLOW_TYPES = {"xlsx", "xls"};
            boolean isHave = false;
            for (String ext : CONTACT_ALLOW_TYPES) {
                if (ext.equals(fileExtName.toLowerCase())) {
                    isHave = true;
                    break;
                }
            }
            if (!isHave) {
                rtnMap.put("code", "-1");
                rtnMap.put("msg", "導入失敗,請選擇正確文件文件!");
                return rtnMap;
            }
            // 獲取item中的上傳文件的輸入流
            InputStream is = item.getInputStream();
            zzjgFacade.batchImportZzjg(new RequestBean(), is);

        } catch (Exception e) {
            rtnMap.put("code", "-1");
            rtnMap.put("msg", "導入失敗!");
            return rtnMap;
        }

 //實際應用

public BWJsonResult uploadFile(HttpServletRequest request) {
        // 上傳時生成的臨時文件保存目錄
        String tempPath = request.getSession().getServletContext().getRealPath("/temp");
        File tmpFile = new File(tempPath);
        // 消息提示
        try {
            DiskFileItemFactory factory = new DiskFileItemFactory();
            factory.setSizeThreshold(1024 * 100);// 設置緩沖區的大小為100KB,如果不指定,那么緩沖區的大小默認是10KB
            factory.setRepository(tmpFile);
            ServletFileUpload upload = new ServletFileUpload(factory);
            upload.setHeaderEncoding("UTF-8");
            if (!ServletFileUpload.isMultipartContent(request)) {
                logger.info("文件不可為空");
                return new BWJsonResult(new MoiraiException(MoiraiErrorEnum.MOIRAI_PARAMS_MISS_ERROR));
            }
            upload.setFileSizeMax(1024 * 1024 * 10);
            upload.setSizeMax(1024 * 1024 * 100);
            // 4、使用ServletFileUpload解析器解析上傳數據,解析結果返回的是一個List<FileItem>集合,每一個FileItem對應一個Form表單的輸入項
            MultipartFile item = ((MultipartHttpServletRequest) request).getFile("file1");
            if (item.getSize() > 1024 * 1024 * 10) {
                return new BWJsonResult(new MoiraiException(MoiraiErrorEnum.MOIRAI_SYS_FILE_TOL_ERROR));
            }
            // 得到上傳的文件名稱,
            String filename = item.getOriginalFilename();
            logger.info("上傳的文件名稱" + filename);
            if (filename == null || filename.trim().equals("")) {
                return new BWJsonResult(new MoiraiException(MoiraiErrorEnum.MOIRAI_PARAMS_MISS_ERROR));
            }
            filename = filename.substring(filename.lastIndexOf("/") + 1);
            String fileExtName = filename.substring(filename.lastIndexOf(".") + 1);
            logger.info("上傳的文件的擴展名是:" + fileExtName);

            InputStream in = item.getInputStream();
            String saveFilename = AdminUtils.makeFileName(fileExtName);
            String realSavePath = AdminUtils.makePath(saveFilename, "specialUse");
            String filurl = realSavePath + "/" + saveFilename;
            logger.info("文件上傳路徑為:" + filurl);
            int result = HttpClientUtil.sendPostFiles(uploadUrl + filurl, in);
            in.close();
            logger.info("文件保存路徑是:" + uploadUrl + filurl);
            logger.info("文件下載路徑是:" + downloadUrl + filurl);
            if (result == 1) {
                //response.getWriter().write("0" + "," + "文件上傳成功!" + "," + filurl + "," + filename);
                return new BWJsonResult(new SysFileResponse(downloadUrl + filurl));
            } else {
                // response.getWriter().write("-1" + "," + "文件上傳失敗,原因:網絡異常");
                return new BWJsonResult(new MoiraiException(MoiraiErrorEnum.MOIRAI_SYS_FILE_IN_ERROR));
            }
        } catch (Exception e) {
            logger.error("", e);
            //response.getWriter().write("-1" + "," + "文件上傳失敗,原因:" + e.getMessage());
            return new BWJsonResult(new MoiraiException(MoiraiErrorEnum.MOIRAI_TENANT_ERROR));
        }
    }

//調用代碼

<html>
    <body>
        <form action="http://127.0.0.1:8087/sys/uploadfile" method="POST" enctype="multipart/form-data">
            <input type="file" name="file1" />
            <input type="submit" name="submit" />
        </form>
    </body>
</html>

 


免責聲明!

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



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