使用 Commens-FileUpload 组件实现文件上传
1,首先我们在 jsp 页面文件上写入简单的 form 表单元素
<form action="servlet/Upload" method="post" enctype="multipart/form-data"> 用户名:<input name="uname" type="text"/> 图片:<input name="file" type="file"/> <input type="submit" value="提交"/> </form>
form表单中 method 属性的 值 不可以 设置成 get 因为get上传的文件的内存太小。
还有 enctype属性的值设置成 multipart/form-data 大体意思是上传的类型是最大值
还有一个是 提交表单不用设置name 属性 。设置 name 属性 没有 意义,会大大的减缓 浏览器运行速度
2,配置 jar 包
commons-fileupload-1.3.2.jar
commons-io-2.5.jar
3,写 servle t语句
package cn.happy.servlet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; 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.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class Upload extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //解决中文乱码问题 因为提交方式是 post 所以使用 request.setCharacterEncoding()方法
request.setCharacterEncoding("utf-8");
//借助第三方apache 组织的jar包 //上传 //创建接收文件的工厂类 FileItemFactory factory=new DiskFileItemFactory(); //创建解析对象 ServletFileUpload upload=new ServletFileUpload(factory); try { //根据请求解析出 FileItem 类型的 集合 每一个 item 就是一个表单对象 List<FileItem> list = upload.parseRequest(request); for (FileItem item : list) { //判定 是否是普通的表单 如果是 返回 true 如果不是则 false if(item.isFormField()){ //这里表示普通的表单 //找到表单名字 判定是否于源文件名相同 if(item.getFieldName().equals("uname")){ String uname = item.getString("utf-8"); request.setAttribute("uname", uname); } }else{//是文本表单 //文件域字段 获取想要上传文件的名字 String filename = item.getName(); //servlet里面能获取application //获取你要上传的最终路径的绝对路径 /*因为java里头没有application 所以我们使用 * getServletContext()方法点出getRealPath("里头写的是上传文件到哪儿的路径")写入绝对路径 */ String path = getServletContext().getRealPath("/WEB-INF/upload"); //使用文件接收最终的文件路径写入我们的内容 File file=new File(path,filename); item.write(file); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }