使用form表单文件上传(enctype)

本文详细介绍了如何使用commons-fileupload库进行文件上传处理,包括配置、表单设置、解析请求及文件保存过程。涵盖依赖包引入、表单属性设置、解析表单数据、区分普通表单与文件字段、文件路径设定及最终上传实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引入两个架包
commos-fileupload.jar
commons-fileupload.jar依赖于commons-io.jar

表单的提交方式必须为post
在表单中必须添加一个属性enctype="multipart/form-data"
提交到Servlet中就不能再用request.getparameter()来接受
判断前台表单中是否有multipart属性
通过parseRequest解析form中的所有请求字段,并保存到item集合中

用迭代器遍历整个item
在item中分为普通表单,和文件,两个有些不同
if (item.isFormField())判断是否为普通表单字段
使用String itemname = item.getFieldName();来获取表单中name值
使用item.getString("UTF-8");来获取表单中value
如果是文件:filename = item.getName();//获取文件名
文件的上传路劲String path  = request.getSession().getServletContext().getRealPath("image");
这个是当前项目的根目录中(也可以上传到别的文件中)
最后就是上传就可以了
File file = new File(path,filename);
item.write(file);//上传
 

	<form action="servlet1" method="post" enctype="multipart/form-data" >
		学号:<input type="text" name="username"><br>
		姓名:<input type="text" name="password"><br>
		<input type="file" name="picture"><br> 
	    <input type="submit" value=" 提交">
	</form>

 

package 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.annotation.WebServlet;
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;


@WebServlet("/servlet1")
public class servlet1 extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// response.sendRedirect("index.jsp");

		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		// 上传

		try {
			boolean isMultipart = ServletFileUpload.isMultipartContent(request);

			if (isMultipart)// 判断前台的form是否有multipart属性
			{
				FileItemFactory factory = new DiskFileItemFactory();
				ServletFileUpload upload = new ServletFileUpload(factory);
				// 通过parseRequest解析form中的所有请求字段,并保存到item集合中
				List<FileItem> items;
				items = upload.parseRequest(request);
				Iterator<FileItem> iter = items.iterator();
				// 遍历items中的数据(no name picture)
				String filename = null;
		        while(iter.hasNext())//通过迭代器遍历
		        {
		        	FileItem item = iter.next();
		        	String itemname = item.getFieldName();
		        	//System.out.println(itemname);
		        	if (item.isFormField()) {//普通表单
		        		if(itemname.equals("username")){//根据name来获取
			        		System.out.println(itemname+" "+item.getString("UTF-8"));
			        	}
			        	else if(itemname.equals("password")) {
			        		System.out.println(itemname+" "+item.getString());
						}
					}
		        	else {//文件
		        		//获取文件名,getfilename获取普通表单字段的值
		        		filename = item.getName();//获取文件名
		        		System.out.println(itemname+" "+filename);
		        		//String path  = "C:\\apache-tomcat-9.0.29";
		        		String path  = request.getSession().getServletContext().getRealPath("image");
			        	File file = new File(path,filename);//新建一个文件,包含路劲和文件名
			        	//item.write(file);//上传
					}
		        }
		        System.out.println("上传成功");

			}else {
                  System.out.print("文件上传失败");
			}
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值