使用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); } }
相关文章推荐
- 表单包含file上传文件提交,使用ajaxSubmint或者ajaxForm 遇到的问题以及解决方法
- 上传文件是 form表单需要设置一个属性值enctype
- httpClient 使用multipart/form-data 类型上传文件及表单
- 使用FormData对包含文件类型的form表单进行异步提交(文件上传)并配置回调
- asp.net文件上传用到html的file控件,在使用母版页Master,更改form的Enctype=multipart/form-data的方法
- ajax上传文件表单,图片、文件无刷新上传,jquery.form.js的使用
- Android使用MultipartEntityBuilder实现类似form表单提交方式的文件上传
- ANDROID使用MULTIPARTENTITYBUILDER实现类似FORM表单提交方式的文件上传
- spring mvc项目使用form表单上传文件
- Swift使用Alamofire上传图片等FormData表单文件的方法
- 使用jQuery.form插件实现表单异步提交+上传文件
- 上传含有文件的form表单(使用formdata)
- 使用ajax提交form表单,包括ajax文件上传
- javascript构造可以上传文件的form表单(通过js修改enctype)
- form表单使用ajaxsubmit上传文件,并验证
- httpClient 使用multipart/form-data 类型上传文件及表单
- ajax上传文件,提交表单,使用FormData和XMLHttpRequest提交表单
- 使用ajax提交form表单,包括ajax文件上传
- form表单上传文件使用multipart请求处理
- 使用form表单上传文件(一)