Servlet实现多文件上传2.0

来源:互联网 发布:坚持做一件事 知乎 编辑:程序博客网 时间:2024/05/29 18:31

今天项目需要添加用户,表单里有个上传图片功能,于是百度了很多方法,都比较乱。所以今天整理了一下文件上传功能。

文件上传需要:

1.commons-fileupload-1.3.jar;

2.commons-io-2.4.jar;

这里的jar包版本应该无所谓,反正我的是这样子。

然后java代码:

import java.io.File;import java.io.IOException;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.FileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/** * Don't ask me, I am also baidu * */public class upfile extends HttpServlet{private String path="D:\\temp";//目录(这里我手动创建的目录)private String tempPath="D:\\temp\\buffer";//临时文件(这里我手动创建的目录)File tempPathFile;public void service(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{                 response.setContentType("text/html;charset=utf-8");                 request.setCharacterEncoding("utf-8");                 try {//为磁盘创建一个工厂  - - - - - -   基于文件项目DiskFileItemFactory factory=new DiskFileItemFactory();/// /设置工厂约束factory.setSizeThreshold(4096);//设置缓冲区大小,这里是4kbfactory.setRepository(tempPathFile);//设置缓冲区目录// 创建一个新文件上传处理程序ServletFileUpload upload=new ServletFileUpload(factory);//设置整体请求大小限制upload.setSizeMax(4194304);//设置大小文件尺寸,这里是4MB//得到所有文件List<FileItem> items=upload.parseRequest(request);Iterator<FileItem> i=items.iterator();while(i.hasNext()){                             FileItem fi=(FileItem)i.next();                             String fileName=fi.getName();                             fi.getInputStream();                             //判断是否为文件                            if(!fi.isFormField()){                                  if(fileName!=null){                                      File fullFile=new File(fi.getName());                                      File savedFile=new File(path,fullFile.getName());                                      System.out.println("文件名:"+fullFile.getName());                                     fi.write(savedFile);                                  }                            }else{                                  String name=fi.getString();                                  name=new String(name.getBytes("ISO-8859-1"),"utf-8");//这里转换中文乱码问题                                 System.out.println("name:"+name);                            }                      }                     System.out.println("upload success");} catch (Exception e) {e.printStackTrace();}}public void init()throws ServletException{File uploadFile=new File(path);System.out.println("init");if(!uploadFile.exists()){System.out.println("1");uploadFile.mkdirs();}File tempPathFile=new File(tempPath);if(!tempPathFile.exists()){System.out.println("2");tempPathFile.mkdirs();}}}
web.xml配置:

  <servlet> <servlet-name>Upload</servlet-name> <servlet-class>com.bst.file.upfile</servlet-class> </servlet> <servlet-mapping> <servlet-name>Upload</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>

html代码:
<!doctype html><html><head><meta charset="utf8"></head><body><form name="myform" action="fileupload.do" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="name"><input type="file" name="myfile"><input type="submit" value="上传"></form></body></html>

然后你就会在D:\temp下看到你的文件啦!!

0 0
原创粉丝点击