1.-文件上传
package cn.bdqn.servlet; import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; 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.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import cn.bdqn.bean.Datail; import cn.bdqn.seriver.DatailSeriver; import cn.bdqn.seriverImpl.DatailSeriverImpl; public class AddServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** + * 文件新增 ===》上传 + * + * 分析: + *01.form表单提交的时候 有文件!enctype="multipart/form-data" + *02.针对与文件上传 我们需要引入2个jar + * fileupload 文件上传的jar 依赖于 io.jar + *03.我们的form表单中 不只是有文件,还有 普通的 文本输入框 + * 这时候 我们能 按照同一种方式 进行处理吗??? No! + *04.是文件 我们按照文件的方式 处理 + * 001.我们怎么知道用户的请求是文件上传类型? + * ServletFileUpload中有一个isMultipartContent(HttpServletRequest)方法 + * 根据用户的请求 我们可以判断 是否是文件上传类型的请求! 返回 boolean + * + * ServletFileUpload中还有一个重要的方法parseRequest(HttpServletRequest) + * 根据用户的请求,会把我们form表单中的每一项(不管是文件还是普通文本都封装成了 + * 一个FileItem对象,这个方法返回一个所有FileItem的List集合 + * + * 002.怎么处理文件? + * FileItem 接口 + * 中有一系列的方法 可以解析是否是文件还是普通文本! + * getInputStream() 把上传文件加载到内存中 输入流 + * getOutputStream() 把内存中的数据写入到服务器的文件中 输出流 + * + * 如果是文件类型,想获取文件名使用 getName() + * 如果是普通文本,想获取字段名使用 getFieldName() + * + * 怎么知道 是文件 还是 普通字段?? + * 有一个方法 isFormField() 返回boolean + * true :普通字段 + * false:文件 + * + * DiskFileItemFactory 核心的实现类 + * 可以设置我们缓冲区的大小 setSizeThreshold(int sizeThreshold) 1024*1024 默认大小 10kb + * 设置文件临时存放的位置 setRepository(File repository) new File("e: emp") 默认路径System.getProperty("java.io.temdir") + * + * 是普通的文本输入框 我们按照普通的方式 处理 + * + * + * 实现文件上传的步骤: + * 01.创建DiskFileItemFactory对象 设置缓冲区的大小 存放的位置 ,可以不设置 有默认值 + * 02.通过DiskFileItemFactory对象 创建出 ServletFileUpload ,就可以知道我们的请求是否是文件上传类型 + * 03.通过ServletFileUpload对象的 parseRequest方法 获取List<FileItem> + * 04.对list集合进行遍历,每遍历一次都要使用FileItem类中的isFormField()来判断是否为文件 + * 001.普通字段 使用 getFieldName() 和getString() 来获取字段名和字段值 + * 002.文件 使用getInputStream getName getOutputStream*/ /* request.setCharacterEncoding("UTF-8"); Datail datail=new Datail(); datail.setAuthor(request.getParameter("author")); datail.setTitle(request.getParameter("title")); datail.setContent(request.getParameter("content")); datail.setCreateDate(new Date()); datail.setPicPath(request.getParameter("picPath")); datail.setSummary(request.getParameter("summary")); DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); try { datail.setCreateDate(df.parse(request.getParameter("createDate"))); } catch (ParseException e) { System.err.println("日期格式不正确"); } DatailSeriver datailSeriver=new DatailSeriverImpl(); boolean flag = datailSeriver.addDatail(datail); if (flag) { request.getRequestDispatcher("ListServlet").forward(request, response); }*/ System.out.println("临时文件的位置"+System.getProperty("java.io.temdir")); //因为新增新闻 需要一个新闻对象 Datail datail=new Datail(); //01.创建DiskFileItemFactory对象 DiskFileItemFactory factory=new DiskFileItemFactory(); //02.通过DiskFileItemFactory对象 创建ServletFileUpload ServletFileUpload upload=new ServletFileUpload(factory); //判断是不是 文件上传请求 boolean flag = upload.isMultipartContent(request); if (flag) { //03.通过ServletFileUpload对象的parseReequest方法获取Lisi<FileItem> try { List<FileItem> items = upload.parseRequest(request); //对集合进行遍历 每一次都要使用FileItem类中的isFormFiled()来判断是不是文件 Iterator<FileItem> its = items.iterator(); while (its.hasNext()) { //获取每一项 FileItem item = its.next(); if (item.isFormField()) {//普通字段 //001.普通字段 使用getFiledName()和getString()来获取字段名和字段值 String fieldName = item.getFieldName(); if (fieldName.equals("title")) { datail.setTitle(item.getString("UTF-8")); }else if (fieldName.equals("author")) { datail.setAuthor(item.getString("UTF-8")); }else if (fieldName.equals("summary")) { datail.setSummary(item.getString("UTF-8")); }else if (fieldName.equals("createDate")) { datail.setCreateDate(new SimpleDateFormat("MM/dd/yyyy").parse(item.getString("UTF-8"))); }else if (fieldName.equals("content")) { datail.setContent(item.getString("UTF-8")); }else if (fieldName.equals("categoryId")) { datail.setCategoryId(Integer.parseInt(item.getString("UTF-8"))); } }else {//文件上传 //指定文件上传的位置getServletContext 获取的是项目在服务器的位置==》 String uploadPath = request.getSession().getServletContext().getRealPath("upload/"); File file=new File(uploadPath) ; if (!file.exists()) {//不存在我们创建 file.mkdirs(); } String fileName = item.getName();//文件名称 if (!fileName .equals("")&&fileName!=null) {//判断用户是否选择了文件上传 File uploadFile=new File(fileName);//上传的文件 File saveFile=new File(uploadPath, uploadFile.getName()); //真正的输出 item.write(saveFile); datail.setPicPath(uploadFile.getName()); } } } DatailSeriver datailSeriver=new DatailSeriverImpl(); boolean flag1 = datailSeriver.addDatail(datail); if (flag1) { request.getRequestDispatcher("ListServlet").forward(request, response); }else { response.sendRedirect("/FindCategoryServlet"); } } catch (FileUploadException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } }
1.-把上传的文件下载到客户端
package cn.bdqn.servlet; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class UploadServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @SuppressWarnings("null") @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); //获取文件名 String picPath = request.getParameter("picPath"); if (picPath!=null||"".equals(picPath.trim())) { //获取文件在服务器的目录 String uploadPath = request.getSession().getServletContext().getRealPath("upload/"); //拼接真实文件地址 File saveFile=new File(uploadPath, picPath); if(saveFile.exists()){ FileInputStream fis = new FileInputStream(saveFile); String filename=URLEncoder.encode(saveFile.getName(),"utf-8"); //解决中文文件名下载后乱码的问题 byte[] b = new byte[fis.available()]; fis.read(b); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition","attachment; filename="+filename+""); //获取响应输出流对象 ServletOutputStream out =response.getOutputStream(); //输出 out.write(b); out.flush(); out.close(); request.getRequestDispatcher("ListServlet").forward(request, response); } else{ //如果文件不存在 request.getRequestDispatcher("ListServlet").forward(request, response); } }else { request.getRequestDispatcher("ListServlet").forward(request, response); } } }