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>

文件上传Apache的更多相关文章

  1. Spring MVC文件上传教程 commons-io/commons-uploadfile

    Spring MVC文件上传教程 commons-io/commons-uploadfile 用到的依赖jar包: commons-fileupload 1.3.1 commons-io 2.4 基于 ...

  2. linux文件上传,给文件或目录添加apache权限

    系统环境:ubuntu11.10/apache2/php5.3.6 在LAMP环境中,测试一个简单的php文件上传功能时,发现/var/log/apache2/error.log中出现如下php警告: ...

  3. Apache Commons fileUpload实现文件上传之一

      需要两个jar包: commons-fileupload.jar Commons IO的jar包(本文使用commons-io-2.4.jar) 利用Servlet来实现文件上传. package ...

  4. Web---文件上传-用apache的工具处理、打散目录、简单文件上传进度

    我们需要先准备好2个apache的类: 上一个博客文章只讲了最简单的入门,现在来开始慢慢加深. 先过渡一下:只上传一个file项 index.jsp: <h2>用apache的工具处理文件 ...

  5. Spring文件上传出错:java.lang.ClassCastException: org.apache.catalina.connector.Request

    java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.spri ...

  6. Apache Commons FileUpload 实现文件上传

    Commons FileUpload简介 Apache Commons是一个专注于可重用Java组件开发的 Apache 项目.Apache Commons项目由三个部分组成: 1.Commons P ...

  7. apache fileupload 文件上传,及文件进度设置获取

    文件上传action处理: boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) ...

  8. apache的MultipartEntityBuilder文件上传

    本文讲解多文件上传方法,不比较上传有几种方法和效率,而是定向分析apache的httpmime包的MultipartEntityBuilder类,源码包:httpmime-4.5.2.jar 一.常用 ...

  9. WEB文件上传之apache common upload使用(一)

    文件上传一个经常用到的功能,它有许多中实现的方案. 页面表单 + RFC1897规范 + http协议上传 页面控件(flash/html5/activeX/applet) + RFC1897规范 + ...

随机推荐

  1. 3.3.3 使用 join 连接字段

        join 命令可以将多个文件结合在一起,每个文件里的每条记录,都共享一个键值(key),键值指的是记录中的主字段,通常会是用户名称.个人姓氏.员工编号之类的数据.举例来说,两个文件,一个列出所 ...

  2. 【转】C# windows服务的创建与调试

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  3. tomcat——大致简介和执行过程

    jsp简介 JSP: JAVA Server Page 使用JAVA语言编写的一种在服务器运行的动态页面 JSP = JAVA + HTML JSP 的执行过程 1: 翻译阶段 把JSP源文件翻译成 ...

  4. POJ3177,/3352.求最少添加多少边使无向图边双连通

    俩个题一样.tarjan算法应用,开始求桥,WA,同一个边双连通分量中low值未必都相同,不能用此来缩点.后来用并查集来判断,若不是桥,则在一个双连通分量中,并之,后边再查,将同一个双连通分量中的点通 ...

  5. HDU 4738 割边

    Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. Codechef-CHEFPRAD(找事件点+贪心)

    题意: 定义一个函数maxMatching(A,B,y),其输入包含两个整数数组 A 和 B 以及一个整数 y,返回一个整数. 记数组 A 的大小为 N,数组 B 的大小为 M.考虑一个由 {a1, ...

  7. java基础语法1

    一:基础语法之--标识符,修饰符,关键字 1.标识符: 定义:类名.变量名以及方法名都被称为标识符.自定义的名字. 注意: ·所有的标识符都应该以字母(A-Z或者a-z),美元符($).或者下划线(_ ...

  8. FTP操作类的使用

    FTP(文件传输协议) FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序 ...

  9. Spring Data Redis与Jedis的选择(转)

    说明:内容可能有点旧,需要在业务上做权衡. Redis的客户端有两种实现方式,一是可以直接调用Jedis来实现,二是可以使用Spring Data Redis,通过Spring的封装来调用.应该使用哪 ...

  10. Java的变量类型

    以下内容引用自http://wiki.jikexueyuan.com/project/java/variable-types.html: 一个变量提供了程序可以操作的命名存储.Java中的每个变量都有 ...