首页 > 代码库 > java中Commons-fileupload实现上传
java中Commons-fileupload实现上传
java中Commons-fileupload组件实现上传
在实现功能之前需要导入两个jar文件,分别是 commons-fileupload-1.3.1.jar 和 commons-io.jar 文件,这里就不提供链接,网上搜索都有可以自行下载。
----------------------------------------------------jsp页面-----------------------------------------------------
第一步:先上传一个简单的jsp页面 ,在上jsp页面之前需要说的问题是:需要在jsp页面导入类库:<%@ page import="org.apache.commons.fileupload.*"%>
接下来来一个简单的form表单的jsp页面的代码,用于界面上传:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ page import="org.apache.commons.fileupload.*"%><!-- 导入类库 --><% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="http://www.mamicode.com/"> <title>文件上传</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="http://www.mamicode.com/styles.css"> --> </head> <body> <h2> 使用commons-fileupload上传文件 </h2> <hr /> <form action="CommonsFileuploadServlet02" method="post" enctype="multipart/form-data"> <table> <tr> <td>上传的用户</td> <td><input type="text" name="uesr" size="20" /></td> </tr> <tr> <td>请选择要上传的文件</td> <td><input type="file" name="filepath" size="20" /></td> </tr> <tr> <td><input type="submit" value="http://www.mamicode.com/上传" /> </td> </tr> </table> </form> </body></html>
-----------------------------------------------CommonsFileuploadServlet.java逻辑处理文件------------------------------------------
第二部份内容是form表单请求的Servlet文件:CommonsFileuploadServlet.java
注意看doPost内部的方法:
package cn.jbit.servlet;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.DiskFileUpload;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 CommonsFileuploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8");// 输入防止中文乱码 response.setContentType("text/html;charset=UTF-8");// 输出防止中文乱码 PrintWriter out = response.getWriter(); String show = "文件上传成功"; // 上传的文件名 String uploadfileName = ""; // 表单元素的name属性值 String filename = ""; // 1.请求信息是否为multipart/form-data类型 boolean isMultipart = ServletFileUpload.isMultipartContent(request); // 2.设置上传文件的存储路径,注意这里获取的是tomcat服务下当前项目下的目录文件 /* * String uploadFilePath = request.getSession().getServletContext() * .getRealPath(""); */ /** * 这里我们可以根据自己的需求自定义路径 */ String uploadFilePath = "D:/"; // 判断如果是multipart/form-data类型 if (isMultipart) { // 创建file工厂 FileItemFactory factory = new DiskFileItemFactory(); // ServletFileUpload对象的创建需要依赖FileItemFactory工厂 ServletFileUpload upload = new ServletFileUpload(factory); /** * 当然,这里我们也可以这么写 ServletFileUpload upload = new * ServletFileUpload(new DiskFileItemFactory()); * //简化了创建FileItemFactory工厂实例 */ // 设置转换时使用的字符编码集 upload.setHeaderEncoding("UTF-8"); /** * 在这里建议: request.setCharacterEncoding("UTF-8");// 输入防止中文乱码 * response.setContentType("text/html;charset=UTF-8");//输出防止中文乱码 * upload.setHeaderEncoding("UTF-8"); 这三句防止乱码的操作都加上!保险!! * */ try { // 这里创建FileItem集合对象,用户接收ServletFileUpload // 对象的parseRequest()方法所返回的值 List<FileItem> fileList = upload.parseRequest(request); Iterator<FileItem> iterator = fileList.iterator(); while (iterator.hasNext()) { // 依次处理每个文件 // 循环获取FileItem对象实例 FileItem item = iterator.next(); /* * isFormField()方法的意思是根据表单内的字段类型返回不同的结果,如果得到的是普通字段的类型则返回true, * 如果是文件字段则返回false */ if (item.isFormField()) { // 这里获取的是提交的form表单内的普通字段、如text、password等 filename = item.getFieldName(); // 表单字段的name属性值 // ,注意是name属性的值,而不是对应value的值,这一点需要明白 System.out.println("---------------" + filename); // 打印 } else {// 否则获取文件字段 String filedname = item.getName(); // 获取上传文件的全路径字符串 System.out.println("--------------" + filedname); // 打印测试 // 判断是否不等于空 if (filedname != null && !filedname.equals("")) { // 创建file对象,保存输入的文件路径(需要上传的文件是从哪个路径下传过来的) File fullFile = new File(filedname); System.out.println("-----------fullFile----------" + fullFile); // 打印测试,看看此时的fullFile是什么 // 这里通过File对象的getName()方法从路径中获取上传的文件名称,然后把文件名和新的路径(需要将上传文件传到哪里的路径)进行拼接,结合,从而形成一个新的路径 File savefile = new File(uploadFilePath, fullFile .getName()); System.out.println("-----------savefile----------" + savefile); // 打印测试将要讲文件传入哪里的全路径 // 通过FileItem对象的write()方法保存的主体内容到指定的文件路径中 item.write(savefile); // 获取上传的文件名称 uploadfileName = savefile.getName(); // 向jsp页面输出上传成功的信息 out.print("<script>alert( " + "‘" + uploadfileName + show + "‘" + ");location.href=http://www.mamicode.com/‘index.jsp‘;</script>"); } else { // 向jsp页面输出上传失败的信息 out.print("<script>alert(‘文件上传失败‘);location.href=http://www.mamicode.com/‘index.jsp‘;</script>"); } } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { out .print("<script>alert(‘系统内部错误‘);location.href=http://www.mamicode.com/‘index.jsp‘;</script>"); } }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。