fileupload文件上传简单实例

1. 首先需要下载需要的组件。

下载commons-fileupload-1.2.1-bin.zip,下载网址:

http://commons.apache.org/downloads/download_fileupload.cgi

下载commons-io-1.4-bin.zip,下载网址:

http://commons.apache.org/downloads/download_io.cgi

2. 用开源的FileUpload组件,可以很方便的给自己的系统添加功能强大的文件上传模块。下图为文件上传的基本流程图。

文件上传流程图

3. 将commons-fileupload-1.2.1-bin.zip包中的commons-fileupload-1.2.1.jar文件和commons-io-1.4-bin.zip包中的commons-io-1.4.jar文件拷贝到web工程下的WEB-INF\lib目录下。

4. 在服务器端创建处理文件上传的Servlet类。源代码如下:

Java代码 复制代码

  1. packagecom.bjsxt.shopping.servlet;
  2. importjava.io.File;
  3. importjava.io.IOException;
  4. importjava.io.PrintWriter;
  5. importjava.util.Iterator;
  6. importjava.util.List;
  7. importjavax.servlet.ServletException;
  8. importjavax.servlet.http.HttpServlet;
  9. importjavax.servlet.http.HttpServletRequest;
  10. importjavax.servlet.http.HttpServletResponse;
  11. importorg.apache.commons.fileupload.FileItem;
  12. importorg.apache.commons.fileupload.FileUploadException;
  13. importorg.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
  14. importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
  15. importorg.apache.commons.fileupload.servlet.ServletFileUpload;
  16. publicclassFileUploadServletextendsHttpServlet
  17. {
  18. privatestaticfinallongserialVersionUID=1L;
  19. publicFileUploadServlet()
  20. {
  21. super();
  22. }
  23. protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
  24. {
  25. this.doPost(request,response);
  26. }
  27. protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
  28. {
  29. request.setCharacterEncoding("utf-8");
  30. finallongMAX_SIZE=300*1024*1024;//设置上传文件最大值
  31. //允许上传的文件格式的列表
  32. finalString[]allowedExt=newString[]{"jpg","jpeg","gif","txt","doc","mp3","wma","m4a","rar","zip"};
  33. response.setContentType("text/html");
  34. //设置字符编码为UTF-8,统一编码,处理出现乱码问题
  35. response.setCharacterEncoding("UTF-8");
  36. //实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
  37. DiskFileItemFactorydfif=newDiskFileItemFactory();
  38. dfif.setSizeThreshold(4096);//设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
  39. dfif.setRepository(newFile(request.getRealPath("/")+"ImagesUploadTemp"));//设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录
  40. //用以上工厂实例化上传组件
  41. ServletFileUploadsfu=newServletFileUpload(dfif);
  42. //设置最大上传大小
  43. sfu.setSizeMax(MAX_SIZE);
  44. PrintWriterout=response.getWriter();
  45. //从request得到所有上传域的列表
  46. ListfileList=null;
  47. try
  48. {
  49. fileList=sfu.parseRequest(request);
  50. }catch(FileUploadExceptione)
  51. {//处理文件尺寸过大异常
  52. if(einstanceofSizeLimitExceededException)
  53. {
  54. out.println("文件尺寸超过规定大小:"+MAX_SIZE+"字节<p/>");
  55. out.println("<ahref=\"./admin/manager/productlist.jsp\">返回</a>");
  56. return;
  57. }
  58. e.printStackTrace();
  59. }
  60. //没有文件上传
  61. if(fileList==null||fileList.size()==0)
  62. {
  63. out.println("请选择上传文件<p/>");
  64. out.println("<ahref=\"./admin/manager/productlist.jsp\">返回</a>");
  65. return;
  66. }
  67. //得到所有上传的文件
  68. IteratorfileItr=fileList.iterator();
  69. //循环处理所有文件
  70. while(fileItr.hasNext())
  71. {
  72. FileItemfileItem=null;
  73. Stringpath=null;
  74. longsize=0;
  75. //得到当前文件
  76. fileItem=(FileItem)fileItr.next();
  77. //忽略简单form字段而不是上传域的文件域(<inputtype="text"/>等)
  78. if(fileItem==null||fileItem.isFormField())
  79. {
  80. continue;
  81. }
  82. //得到文件的完整路径
  83. path=fileItem.getName();
  84. //得到文件的大小
  85. size=fileItem.getSize();
  86. if("".equals(path)||size==0)
  87. {
  88. out.println("请选择上传文件<p/>");
  89. out.println("<ahref=\"./admin/manager/productlist.jsp\">返回</a>");
  90. return;
  91. }
  92. //得到去除路径的文件名
  93. Stringt_name=path.substring(path.lastIndexOf("\\")+1);
  94. //得到文件的扩展名(无扩展名时将得到全名)
  95. Stringt_ext=t_name.substring(t_name.lastIndexOf(".")+1);
  96. //拒绝接受规定文件格式之外的文件类型
  97. intallowFlag=0;
  98. intallowedExtCount=allowedExt.length;
  99. for(;allowFlag<allowedExtCount;allowFlag++)
  100. {
  101. if(allowedExt[allowFlag].equals(t_ext))
  102. break;
  103. }
  104. if(allowFlag==allowedExtCount)
  105. {
  106. out.println("请上传以下类型的文件<p/>");
  107. for(allowFlag=0;allowFlag<allowedExtCount;allowFlag++)
  108. out.println("*."+allowedExt[allowFlag]+"");
  109. out.println("<p/><ahref=\"./admin/manager/productlist.jsp\">返回</a>");
  110. return;
  111. }
  112. //longnow=System.currentTimeMillis();
  113. //根据系统时间生成上传后保存的文件名
  114. //Stringprefix=String.valueOf(now);
  115. //保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
  116. //Stringu_name=request.getRealPath("/")+"ImagesUploaded/"
  117. //+prefix+"."+t_ext;
  118. Stringfilename=t_name;
  119. System.out.println(t_name);
  120. try
  121. {
  122. //保存文件到C:\\upload目录下
  123. fileItem.write(newFile("C:\\upload\\"+filename));
  124. //System.out.println(filename);
  125. out.println("文件上传成功.已保存为:"+filename+"文件大小:"+size+"字节<p/>");
  126. out.println("<ahref=\"./admin/manager/productlist.jsp\">继续上传</a>");
  127. }catch(Exceptione)
  128. {
  129. e.printStackTrace();
  130. }
  131. }
  132. }
  133. }




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.FileUploadException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;


public class FileUploadServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;

 public FileUploadServlet() {
  super();
 }
 protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  this.doPost(request, response);
 }

 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  
  final long MAX_SIZE = 300 * 1024 * 1024;// 设置上传文件最大值
  // 允许上传的文件格式的列表
  final String[] allowedExt = new String[] {"jpg", "jpeg", "gif", "txt",
    "doc","mp3", "wma", "m4a","rar","zip" };
  response.setContentType("text/html");
  // 设置字符编码为UTF-8, 统一编码,处理出现乱码问题
  response.setCharacterEncoding("UTF-8");

  // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
  DiskFileItemFactory dfif = new DiskFileItemFactory();
  dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
  dfif.setRepository(new File(request.getRealPath("/")
    + "ImagesUploadTemp"));// 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录

  // 用以上工厂实例化上传组件
  ServletFileUpload sfu = new ServletFileUpload(dfif);
  // 设置最大上传大小
  sfu.setSizeMax(MAX_SIZE);

  PrintWriter out = response.getWriter();
  // 从request得到所有上传域的列表
  List fileList = null;
  try {
   fileList = sfu.parseRequest(request);
  } catch (FileUploadException e) {// 处理文件尺寸过大异常
   if (e instanceof SizeLimitExceededException) {
    out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
    out
      .println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");
    return;
   }
   e.printStackTrace();
  }
  // 没有文件上传
  if (fileList == null || fileList.size() == 0) {
   out.println("请选择上传文件<p />");
   out.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");
   return;
  }
  // 得到所有上传的文件
  Iterator fileItr = fileList.iterator();
  // 循环处理所有文件
  while (fileItr.hasNext()) {
   FileItem fileItem = null;
   String path = null;
   long size = 0;
   // 得到当前文件
   fileItem = (FileItem) fileItr.next();
   // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
   if (fileItem == null || fileItem.isFormField()) {
    continue;
   }
   // 得到文件的完整路径
   path = fileItem.getName();
   // 得到文件的大小
   size = fileItem.getSize();
   if ("".equals(path) || size == 0) {
    out.println("请选择上传文件<p />");
    out
      .println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");
    return;
   }

   // 得到去除路径的文件名
   String t_name = path.substring(path.lastIndexOf("\\") + 1);
   // 得到文件的扩展名(无扩展名时将得到全名)
   String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
   // 拒绝接受规定文件格式之外的文件类型
   int allowFlag = 0;
   int allowedExtCount = allowedExt.length;
   for (; allowFlag < allowedExtCount; allowFlag++) {
    if (allowedExt[allowFlag].equals(t_ext))
     break;
   }
   if (allowFlag == allowedExtCount) {
    out.println("请上传以下类型的文件<p />");
    for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
     out.println("*." + allowedExt[allowFlag]
       + "");
    out
      .println("<p /><a href=\"FileUpload.html\" target=\"_top\">返回</a>");
    return;
   }

   long now = System.currentTimeMillis();
   // 根据系统时间生成上传后保存的文件名
   String prefix = String.valueOf(now);
   // 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
//   String u_name = request.getRealPath("/") + "ImagesUploaded/"
//     + prefix + "." + t_ext;
   String filename = prefix + "." + t_ext;
   try {
    // 保存文件到C:\\upload目录下
    fileItem.write(new File("C:\\upload\\"+filename));
    System.out.println(filename);
    out.println("文件上传成功. 已保存为: " + prefix + "." + t_ext
      + " 文件大小: " + size + "字节<p />");
    out
      .println("<a href=\"FileUpload.html\" target=\"_top\">继续上传</a>");
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }
}

5. 在客户端创建上传文件页面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值