软件编程
位置:首页>> 软件编程>> java编程>> Apache Commons fileUpload文件上传多个示例分享

Apache Commons fileUpload文件上传多个示例分享

作者:zhangjunhd  发布时间:2021-11-13 07:23:51 

标签:Apache,Commons,fileUpload,文件上传

本文通过实例来介绍如何使用commons-fileupload.jar,Apache的commons-fileupload.jar可方便的实现文件的上传功能,具体内容如下

将Apache的commons-fileupload.jar放在应用程序的WEB-INF\lib下,即可使用。下面举例介绍如何使用它的文件上传功能。

所使用的fileUpload版本为1.2,环境为Eclipse3.3+MyEclipse6.0。FileUpload 是基于 Commons IO的,所以在进入项目前先确定Commons IO的jar包(本文使用commons-io-1.3.2.jar)在WEB-INF\lib下。
此文作示例工程可在文章最后的附件中下载。

示例1

最简单的例子,通过ServletFileUpload静态类来解析Request,工厂类FileItemFactory会对mulipart类的表单中的所有字段进行处理,不只是file字段。getName()得到文件名,getString()得到表单数据内容,isFormField()可判断是否为普通的表单项。
demo1.html


<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
 <title>File upload</title>
</head>
<body>
   //必须是multipart的表单数据。
 <form name="myform" action="demo1.jsp" method="post"
   enctype="multipart/form-data">
   Your name: <br>
   <input type="text" name="name" size="15"><br>
   File:<br>
   <input type="file" name="myfile"><br>
   <br>
   <input type="submit" name="submit" value="Commit">
 </form>
</body>
</html>

demo1.jsp


<%@ page language="java" contentType="text/html; charset=GB18030"
 pageEncoding="GB18030"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="java.util.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
 boolean isMultipart = ServletFileUpload.isMultipartContent(request);//检查输入请求是否为multipart表单数据。
 if (isMultipart == true) {
   FileItemFactory factory = new DiskFileItemFactory();//为该请求创建一个DiskFileItemFactory对象,通过它来解析请求。执行解析后,所有的表单项目都保存在一个List中。
   ServletFileUpload upload = new ServletFileUpload(factory);
   List<FileItem> items = upload.parseRequest(request);
   Iterator<FileItem> itr = items.iterator();
   while (itr.hasNext()) {
     FileItem item = (FileItem) itr.next();
     //检查当前项目是普通表单项目还是上传文件。
     if (item.isFormField()) {//如果是普通表单项目,显示表单内容。
   String fieldName = item.getFieldName();
   if (fieldName.equals("name")) //对应demo1.html中type="text" name="name"
     out.print("the field name is" + item.getString());//显示表单内容。
   out.print("<br>");
     } else {//如果是上传文件,显示文件名。
   out.print("the upload file name is" + item.getName());
   out.print("<br>");
     }
   }
 } else {
   out.print("the enctype must be multipart/form-data");
 }
%>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
 <title>File upload</title>
</head>
<body>
</body>
</html>

结果:
the field name isjeff
the upload file name isD:\C语言考试样题\作业题.rar

示例2

上传两个文件到指定的目录。

demo2.html


<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
 <title>File upload</title>
</head>
<body>
 <form name="myform" action="demo2.jsp" method="post"
   enctype="multipart/form-data">
   File1:<br>
   <input type="file" name="myfile"><br>
   File2:<br>
   <input type="file" name="myfile"><br>
   <br>
   <input type="submit" name="submit" value="Commit">
 </form>
</body>
</html>

demo2.jsp


<%@ page language="java" contentType="text/html; charset=GB18030"
 pageEncoding="GB18030"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%String uploadPath="D:\\temp";
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart==true){
  try{
   FileItemFactory factory = new DiskFileItemFactory();
   ServletFileUpload upload = new ServletFileUpload(factory);
   List<FileItem> items = upload.parseRequest(request);//得到所有的文件
   Iterator<FileItem> itr = items.iterator();
   while(itr.hasNext()){//依次处理每个文件
    FileItem item=(FileItem)itr.next();
    String fileName=item.getName();//获得文件名,包括路径
    if(fileName!=null){
      File fullFile=new File(item.getName());
      File savedFile=new File(uploadPath,fullFile.getName());
      item.write(savedFile);
    }
   }
   out.print("upload succeed");
  }
  catch(Exception e){
    e.printStackTrace();
  }
}
else{
  out.println("the enctype must be multipart/form-data");
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>File upload</title>
</head>
<body>
</body>
</html>

结果:
upload succeed

此时,在"D:\temp"下可以看到你上传的两个文件。

示例3

上传一个文件到指定的目录,并限定文件大小。

demo3.html


<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
 <title>File upload</title>
</head>
<body>
 <form name="myform" action="demo3.jsp" method="post"
   enctype="multipart/form-data">
   File:<br>
   <input type="file" name="myfile"><br>
   <br>
   <input type="submit" name="submit" value="Commit">
 </form>
</body>
</html>

demo3.jsp


<%@ page language="java" contentType="text/html; charset=GB18030"
 pageEncoding="GB18030"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
 File uploadPath = new File("D:\\temp");//上传文件目录
 if (!uploadPath.exists()) {
   uploadPath.mkdirs();
 }
 // 临时文件目录
 File tempPathFile = new File("d:\\temp\\buffer\\");
 if (!tempPathFile.exists()) {
   tempPathFile.mkdirs();
 }
 try {
   // Create a factory for disk-based file items
   DiskFileItemFactory factory = new DiskFileItemFactory();

// Set factory constraints
   factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
   factory.setRepository(tempPathFile);//设置缓冲区目录

// Create a new file upload handler
   ServletFileUpload upload = new ServletFileUpload(factory);

// Set overall request size constraint
   upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB

List<FileItem> items = upload.parseRequest(request);//得到所有的文件
   Iterator<FileItem> i = items.iterator();
   while (i.hasNext()) {
     FileItem fi = (FileItem) i.next();
     String fileName = fi.getName();
     if (fileName != null) {
   File fullFile = new File(fi.getName());
   File savedFile = new File(uploadPath, fullFile
      .getName());
   fi.write(savedFile);
     }
   }
   out.print("upload succeed");
 } catch (Exception e) {
   e.printStackTrace();
 }
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>File upload</title>
</head>
<body>
</body>
</html>

示例4

利用Servlet来实现文件上传。

Upload.java


package com.zj.sample;

import java.io.File;
import java.io.IOException;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@SuppressWarnings("serial")
public class Upload extends HttpServlet {
 private String uploadPath = "D:\\temp"; // 上传文件的目录
 private String tempPath = "d:\\temp\\buffer\\"; // 临时文件目录
 File tempPathFile;

@SuppressWarnings("unchecked")
 public void doPost(HttpServletRequest request, HttpServletResponse response)
     throws IOException, ServletException {
   try {
     // Create a factory for disk-based file items
     DiskFileItemFactory factory = new DiskFileItemFactory();

// Set factory constraints
     factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
     factory.setRepository(tempPathFile);// 设置缓冲区目录

// Create a new file upload handler
     ServletFileUpload upload = new ServletFileUpload(factory);

// Set overall request size constraint
     upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB

List<FileItem> items = upload.parseRequest(request);// 得到所有的文件
     Iterator<FileItem> i = items.iterator();
     while (i.hasNext()) {
      FileItem fi = (FileItem) i.next();
      String fileName = fi.getName();
      if (fileName != null) {
        File fullFile = new File(fi.getName());
        File savedFile = new File(uploadPath, fullFile.getName());
        fi.write(savedFile);
      }
     }
     System.out.print("upload succeed");
   } catch (Exception e) {
     // 可以跳转出错页面
     e.printStackTrace();
   }
 }

public void init() throws ServletException {
   File uploadFile = new File(uploadPath);
   if (!uploadFile.exists()) {
     uploadFile.mkdirs();
   }
   File tempPathFile = new File(tempPath);
   if (!tempPathFile.exists()) {
     tempPathFile.mkdirs();
   }
 }
}

 demo4.html


<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
 <title>File upload</title>
</head>
<body>
// action="fileupload"对应web.xml中<servlet-mapping>中<url-pattern>的设置.
 <form name="myform" action="fileupload" method="post"
   enctype="multipart/form-data">
   File:<br>
   <input type="file" name="myfile"><br>
   <br>
   <input type="submit" name="submit" value="Commit">
 </form>
</body>
</html>

web.xml


<servlet>
 <servlet-name>Upload</servlet-name>
 <servlet-class>com.zj.sample.Upload</servlet-class>
</servlet>

<servlet-mapping>
 <servlet-name>Upload</servlet-name>
 <url-pattern>/fileupload</url-pattern>
</servlet-mapping>

来源:http://zhangjunhd.blog.51cto.com/113473/18331/

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com