设为首页 收藏本站
查看: 395|回复: 0

[经验分享] apache的FileUpLoad

[复制链接]
发表于 2016-12-30 08:21:35 | 显示全部楼层 |阅读模式
  我的FileUpload入门实例(超级简单)
      Commons是Apache开放源代码组织中的一个Java子项目,该项目主要涉及一些开发中常用的模块,例如文件上传、命令行处理、数据库连接池、XML配置文件处理等。这些项目集合了来自世界各地软件工程师的心血,其性能、稳定性等方面都经受得住实际应用的考验。Fileupload就是其中用来处理HTTP文件上传的子项目。下面介绍一下如何使用Fileupload来处理浏览器提交到服务器的文件信息。
环境配置
1.下载并安装Tomcat(注意配置环境变量,我这里使用的版本是Tomcat5.5)
2.到Apache的官方网站下载FileLoad的jar包,我这里用的版本是commons-fileupload-1.2.jar,下载地址:
   http://jakarta.apache.org/commons/fileupload/

文件上传页面
文件上传页面的代码如下。为了演示多文件上传,设计了三个文件域,同时上传三个文件。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>文件上传实例</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="40"
marginwidth="0" marginheight="0">
<center>
<h1>文件上传演示</h1>
<form name="uploadform" method="POST" action="uploadServlet"
ENCTYPE="multipart/form-data">
<table border="1" width="450" cellpadding="4" cellspacing="2"
bordercolor="#9BD7FF">
<tr>
  <td width="100%" colspan="2">文件一:<input name="file1" size="40"
   type="file"></td>
</tr>
<tr>
  <td width="100%" colspan="2">文件名2:<input name="file2" size="40"
   type="file"></td>
</tr>
<tr>
  <td width="100%" colspan="2">文件3:<input name="file3" size="40"
   type="file"></td>
</tr>
</table>
<br />
<br />
<table>
<tr>
  <td align="center"><input name="upload" type="submit"
   value="开始上传" /></td>
</tr>
</table>
</form>
</center>
</body>
</html>

处理上传文件信息
这里,将处理上传文件交给一个简单的Servlet(UploadServlet)来处理,代码如下:
package com.taobao.shenchong;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
/**
  * @author shenchong 2007-05-30
  */
private static final long serialVersionUID = 1L;
public void service(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  try {
   //这句很重要,解决了文件名乱码的问题
   request.setCharacterEncoding("utf-8");
   boolean isMultipart = ServletFileUpload.isMultipartContent(request);
   System.out.println(isMultipart);
   // Create a factory for disk-based file items
   FileItemFactory factory = new DiskFileItemFactory();
   // Create a new file upload handler
   ServletFileUpload upload = new ServletFileUpload(factory);
   // Parse the request
   List fileItems = null;
   try {
    fileItems = upload.parseRequest(request);
    String code = upload.getHeaderEncoding();
    System.out.println(code);
   } catch (FileUploadException e) {
    e.printStackTrace();
   }
   // 依次处理每个上传的文件
   Iterator i = fileItems.iterator();
   while (i.hasNext()) {
    FileItem item = (FileItem) i.next();
    // 忽略其他不是文件域的所有表单信息
    if (!item.isFormField()) {
     // 获取文件上传的客户端路径
     String name = item.getName();
     // 获取上传的文件名
     int j = name.lastIndexOf("\\");
     String filename = name.substring(j + 1, name.length());
     System.out.println(filename);
     // 获取表单的文件域的名称
     String fieldName = item.getFieldName();
     System.out.println(fieldName);
     // 获取上传文件的大小
     long size = item.getSize();
     System.out.println(Long.toString(size));
     if ((name == null || name.equals("")) && size == 0)
      continue;
     //设置文件上传目录,这里设为D:/temp
     File uploadedFile = new File("D:/temp/" + filename);
     try {
      //Upload
      item.write(uploadedFile);
     } catch (Exception e) {
      e.printStackTrace();
     }
    }
   }
   PrintWriter pw = response.getWriter();
   pw.println("<html>");
   pw.println("<head>");
   pw.println("</head>");
   pw.println("<body>");
   pw.println("<h3>文件上传成功!</h3>");
   pw.println("</body>");
   pw.println("</html>");
  } catch (Exception e) {
   PrintWriter pw = response.getWriter();
   pw.println("<html>");
   pw.println("<head>");
   pw.println("</head>");
   pw.println("<body>");
   pw.println("<h3>文件上传失败!</h3>");
   pw.println("</body>");
   pw.println("</html>");
   e.printStackTrace();
  }
}
}

在Web.xml中配置Servlet
写完Servlet之后,可别忘了在Web.xml中进行相关的设置,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
  <servlet-name>uploadServlet</servlet-name>
  <servlet-class>com.taobao.shenchong.UploadServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>uploadServlet</servlet-name>
  <url-pattern>/uploadServlet</url-pattern>
</servlet-mapping>
</web-app>

部署
现在,你可以把工程部署到Tomcat了,然后测试一下是否正确,另外FileUpload这个类里面还有许多方法这里没有提到,你可以通过查看API的方式了解,比如:设置缓存等方法等

后话
在我做这个实例的时候我碰到了上传文件中文名称乱码的问题,搞了一个上午才把编码问题搞明白,下次我会把一篇解决Java编码问题的文章帖出来,供朋友们参考。

PS:如果以上代码有什么问题,请给我留言,可能我有没想到的地方,大家一起交流
      如果有时间,请经常去Apache的官方网站逛逛,那里有很多非常好的开源项目

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-321305-1-1.html 上篇帖子: Apache模块索引 下篇帖子: apache work&prefork
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表