JSP Commons-FileUpload 组件实现文件上传

目录

1.获取Commons-FileUpload组件的步骤

2.表单的属性设置

3.Commons-FileUpload组件的API

4.编写上传文件处理页的实现步骤

5.实现代码


1.获取Commons-FileUpload组件的步骤

  • 下载Commons-FileUpload组件,即commons-fileupload-1.4-bin
  • 下载Commons-IO组件,即ccommons-io-2.11.0-bin.zip,该组件用于处理文件上传所依赖的I/O操作

2.表单的属性设置

<form action="upload.jsp" enctype="multipart/form-data" method="post">

        注意:上传文件时form标签的method属性值必须为“post”,不能为get

2.1表单enctype属性有以下三个属性值

描述
application/x-www-form-urlencoded在发送前编码所有字符(默认)
multipart/form-data

不对字符编码。

在使用包含文件上传控件的表单时,必须使用该值。

text/plain空格转换为 "+" 加号,但不对特殊字符编码。
  • 表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。
  • application/x-www-form-urlencoded不是不能上传文件,是只能上传文本格式的文件,multipart/form-data是将文件以二进制的形式上传,这样可以实现多种类型的文件上传。

2.2 使用File控件选择文件

<form action="upload.jsp" enctype="multipart/form-data" method="post">
		<p>选择文件:<input type="file" name="nfile" /></p>
		<P><input type="submit" value="提交" />
	</form>

3.Commons-FileUpload组件的API

在使用Commons-FileUpload组件之前,首先需要在项目中添加commons-fileupload-1.4.jar和commons-io-2.4.jar 文件。添加完jar文件之后,JSP文件中还需要将Commons-FileUpload组件所使用的类库导入JSP文件中

<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>

4.编写上传文件处理页的实现步骤

1.创建FileItemFactory对象

2.创建ServletFileUpload对象

3.解析form表单提交的所有表单元素数据

5.实现代码

<%@ page import="java.io.*,java.util.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%
//这一句话只对文件名有效,对普通字段无效
		request.setCharacterEncoding("utf-8");
		//请求信息中的内容是否multipart类型,判断是否是一个文件上传的类型
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		
		//上传文件的存储路径(服务器文件系统上的绝对文件路径)
		String uploadFilePath = request.getSession().getServletContext().getRealPath("upload/");
		
		if(isMultipart){
			//是一个上传文件的请求才用upload组件,工场对象
			FileItemFactory factory = new DiskFileItemFactory();
			//创建ServletFileUpload对象
			ServletFileUpload upload = new ServletFileUpload(factory);	
			try{
				//关键步骤,解析form表单中所有文件,获得提交数据
				List<FileItem> items = upload.parseRequest(request);
				for(FileItem item :  items){
					//判断数据是普通字段还是文件字段
					if(item.isFormField()){			//普通表单字段,isFormField(),普通表单字段返回true,反之返回false
						//普通字段
						System.out.println(item.getFieldName()+": "+item.getString("UTF-8"));
					}else{	//文件表单字段
						//文件字段
						//获取文件名
						String fileName = item.getName();
						//项目发布的路径,application.getRealPath()得到虚拟目录对应的绝对路径
						String uploadPath = application.getRealPath("/upload");
						System.out.println(uploadPath);
						//uploadPath父目录,fileName文件名
						File outFile = new File(uploadPath,fileName);
						//写入文件
						item.write(outFile);
					}
				}		
			}catch(Exception e){
				e.printStackTrace();
			}
		}
%>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值