您的位置:首页 > 其它

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

2020-07-16 04:30 741 查看

引入两个架包
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);//上传
 

[code]	<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>

 

[code]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);
}

}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: