zoukankan      html  css  js  c++  java
  • 文件上传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:a1.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>
  • 相关阅读:
    Windows 7 登录界面背景图片定制
    adobe illustrator cs5的激活方法和激活码
    调用win32 API,实现全局系统热键小结
    什么是收缩压和舒张压?
    Delphi如何列举系统运行的进程
    Asp.net DateTime格式化
    Save icons from shell32.dll 的Delphi源码
    使用IIS 7.0 PowerShell 创建web站点,Web应用,虚拟路径和应用程序池
    开启迅盘:ReadyBoost和ReadyDrive的开启方法
    NT系统下木马进程的隐藏与检测
  • 原文地址:https://www.cnblogs.com/chenglc/p/7524631.html
Copyright © 2011-2022 走看看