A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package zhiwei.deng.web.servlet.util;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.UnsupportedEncodingException;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.UUID;

  12. import javax.servlet.ServletException;
  13. import javax.servlet.http.HttpServletRequest;

  14. import org.apache.commons.fileupload.FileItem;
  15. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  16. import org.apache.commons.fileupload.servlet.ServletFileUpload;

  17. import zhiwei.deng.web.servlet.domain.User;
  18. import zhiwei.deng.web.servlet.exception.NoFileUpException;
  19. import zhiwei.deng.web.servlet.exception.UpFileSizeException;
  20. import zhiwei.deng.web.servlet.exception.UpFileTypeException;

  21. public class UploadUtil {
  22.         //设置文件上传的临时目录
  23.         public static String tempPath = "/WEB-INF/temp";
  24.         public static String uploadPath = "/WEB-INF/upload";
  25.        
  26.        
  27.        
  28.        
  29.         //
  30.         public static void doSave(User user,String uploadPath) throws Exception{
  31.                 //得到上传的文件
  32.                 List<FileItem> fileItemList = user.getFileItemList();
  33.                 for(FileItem fileItem : fileItemList){
  34.                         BufferedInputStream bis = new BufferedInputStream(fileItem.getInputStream());
  35.                         //取得uuid文件名
  36.                         String realFileName = fileItem.getName();
  37.                         realFileName = UploadUtil.realFileName(realFileName);
  38.                         String uuidFileName = UploadUtil.makeUuidFileName(realFileName);
  39.                         //取得uuid文件路径
  40.                         String uuidFilePath = UploadUtil.makeUuidFilePath(uploadPath, realFileName);
  41.                         //复制
  42.                         UploadUtil.doSave(bis, uuidFilePath, uuidFileName);
  43.                         //删除临时目录
  44.                         fileItem.delete();
  45.                 }
  46.                
  47.         }
  48.        
  49.        
  50.         //将上传文件封装到一个javabean中
  51.         public static User doUpload(HttpServletRequest request) throws Exception{
  52.                
  53.                 User user = new User();
  54.                 //得到一个文件上传的工厂
  55.                 DiskFileItemFactory factory =  new DiskFileItemFactory();
  56.                 //设置缓存的大小,默认是10K
  57.                 factory.setSizeThreshold(100*1024);
  58.                
  59.                
  60.                 String tempPath = request.getSession().getServletContext().getRealPath(UploadUtil.tempPath);
  61.                 factory.setRepository(new File(tempPath));
  62.                
  63.                 //文件上传的核心
  64.                 ServletFileUpload upload = new ServletFileUpload(factory);
  65.                
  66.                 //设置文件上传的编码方式
  67.                 upload.setHeaderEncoding("utf-8");
  68.                 //判断上传的是否是MIME协议
  69.                 boolean flag = upload.isMultipartContent(request);
  70.                 if(flag){
  71.                         //如果是MIME协议的话
  72.                                 List<FileItem> list = upload.parseRequest(request);
  73.                                 List<FileItem> fileItemList = new ArrayList<FileItem>();
  74.                                 for(FileItem fileItem : list){
  75.                                         //判断是否是普通(窗体)字段,只有两种情况,要不然就是上传字段
  76.                                         if(fileItem.isFormField()){
  77.                                                 //如果是普通字段
  78.                                                 String fieldName = fileItem.getFieldName();
  79.                                                 String fieldValue = fileItem.getString("utf-8");
  80.                                                 //把用户的名称放进javaBean中
  81.                                                 user.setUsername(fieldValue);
  82.                                         }else{
  83.                                                 //必定是上传字段了
  84.                                                
  85.                                                 //没有上传文件
  86.                                                 if(fileItem.getSize()==0){
  87.                                                         throw new NoFileUpException();
  88.                                                 }
  89.                                                 if(!UploadUtil.realFileName(fileItem.getName()).endsWith(".jpg")){
  90.                                                         fileItem.delete();
  91.                                                         throw new UpFileTypeException();
  92.                                                 }
  93.                                                 if(fileItem.getSize()> 200 * 1024){
  94.                                                         fileItem.delete();
  95.                                                         throw new UpFileSizeException();
  96.                                                 }
  97.                                                 //user.setFileItem(fileItem);
  98.                                                 //fileItemList.add(fileItem);
  99.                                                 user.getFileItemList().add(fileItem);
  100.                                         }
  101.                                 }
  102.                 }else{
  103.                         throw new ServletException();
  104.                 }
  105.                 return user;
  106.         }
  107.        
  108.        
  109.        
  110.         //复制文件
  111.         public static void doSave(BufferedInputStream bis,String uuidFilePath,String uuidFileName){
  112.                 BufferedOutputStream bos = null;
  113.                 try {
  114.                         bos = new BufferedOutputStream(new FileOutputStream(uuidFilePath+"/"+uuidFileName));
  115.                         int len=0;
  116.                         byte[] buf = new byte[1024];
  117.                         while((len=bis.read())>0){
  118.                                 bos.write(buf, 0, len);
  119.                         }
  120.                 }catch(Exception e){
  121.                         e.printStackTrace();
  122.                 }finally{
  123.                         if(bis!=null){
  124.                                 try {
  125.                                         bis.close();
  126.                                 } catch (IOException e) {
  127.                                         e.printStackTrace();
  128.                                 }
  129.                         }
  130.                         if(bos!=null){
  131.                                 try {
  132.                                         bos.close();
  133.                                 } catch (IOException e) {
  134.                                         e.printStackTrace();
  135.                                 }
  136.                         }
  137.                        
  138.                 }       
  139.         }
  140.        
  141.        
  142.        
  143.        
  144.        
  145.         //获取真实路径
  146.         public static String realFileName(String realFileName){
  147.                 int index = realFileName.lastIndexOf("\\");
  148.                 if(index>=0){
  149.                         realFileName = realFileName.substring(index+1);
  150.                 }
  151.                 return realFileName;
  152.         }
  153.        
  154.        
  155.        
  156.        
  157.        
  158.        
  159.         //设置得到uuid的文件路径
  160.         public static  String makeUuidFilePath(String uploadPath, String uuidFileName) {
  161.                 String uuidFilePath = null;
  162.                 int code = uuidFileName.hashCode();//打印文件名的hashcode码,
  163.                 int dir1 = code & 0xF;//设置一级目录
  164.                 int dir2 = code>>4 & 0xF;
  165.                 File file = new File(uploadPath+"/"+dir1+"/"+dir2);
  166.                 if(!file.exists()){
  167.                         //如果目录不存在,一次性创建
  168.                         file.mkdirs();
  169.                 }
  170.                 uuidFilePath = file.getPath();
  171.                
  172.                 return uuidFilePath;
  173.         }

  174.         //设置得到uuId的文件名称
  175.         public static String makeUuidFileName(String realFileName) {
  176.                 return UUID.randomUUID().toString()+"_"+realFileName;
  177.         }
  178.        
  179. }
复制代码
  1. package zhiwei.deng.web.servlet.upload;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. import java.util.List;
  10. import java.util.UUID;

  11. import javax.servlet.ServletException;
  12. import javax.servlet.http.HttpServlet;
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.servlet.http.HttpServletResponse;

  15. import org.apache.commons.fileupload.FileItem;
  16. import org.apache.commons.fileupload.FileUploadException;
  17. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  18. import org.apache.commons.fileupload.servlet.ServletFileUpload;

  19. import zhiwei.deng.web.servlet.domain.User;
  20. import zhiwei.deng.web.servlet.exception.NoFileUpException;
  21. import zhiwei.deng.web.servlet.exception.UpFileSizeException;
  22. import zhiwei.deng.web.servlet.exception.UpFileTypeException;
  23. import zhiwei.deng.web.servlet.util.UploadUtil;

  24. public class UploadServlet extends HttpServlet {
  25.         public void doPost(HttpServletRequest request, HttpServletResponse response)
  26.                         throws ServletException, IOException {
  27.        
  28.                 try {
  29.                         User user = UploadUtil.doUpload(request);
  30.                         //得到上传的临时路径
  31.                         String uploadPath = this.getServletContext().getRealPath(UploadUtil.uploadPath);
  32.                         UploadUtil.doSave(user, uploadPath);
  33.                        
  34.                         request.setAttribute("message", "上传成功");
  35.                         request.getRequestDispatcher("/WEB-INF/message.jsp").forward(request, response);
  36.                 }catch(UpFileSizeException e){
  37.                         request.setAttribute("message", "上传的文件的大小超过200K");
  38.                         request.getRequestDispatcher("/WEB-INF/message.jsp").forward(request, response);
  39.                 }catch(UpFileTypeException e){
  40.                         request.setAttribute("message","上传文件格式不对,只能为JPG格式的");
  41.                         request.getRequestDispatcher("/WEB-INF/message.jsp").forward(request, response);
  42.                 }catch(NoFileUpException e){
  43.                         request.setAttribute("message", "没有上传文件");
  44.                         request.getRequestDispatcher("/WEB-INF/message.jsp").forward(request, response);
  45.                 }catch (Exception e) {
  46.                         e.printStackTrace();
  47.                         request.setAttribute("message","上传失败");
  48.                         request.getRequestDispatcher("/WEB-INF/message.jsp").forward(request, response);
  49.                 }       
  50.         }
  51. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

2 个回复

倒序浏览
  1. jsp的代码

  2. <%@ page language="java" pageEncoding="utf-8"%>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <script type="text/javascript">
  6. var count = 0;
  7. function addFile(addButton){
  8. var divElement = document.createElement("div");
  9. var inputElement1 = document.createElement("input");
  10. inputElement1.type="file";
  11. inputElement1.name="upfile";
  12. var inputElement2 = document.createElement("input");
  13. inputElement2.type="button";
  14. inputElement2.value="删除";
  15. //针对删除按钮添加一个事件监听
  16. inputElement2.onclick=function(){
  17. var OutIdDivElement = this.parentNode.parentNode;
  18. OutIdDivElement.removeChild(this.parentNode);
  19. count--;
  20. if(count<5){
  21. addButton.disabled=false;
  22. }
  23. }
  24. //依次将他们联系起来
  25. divElement.appendChild(inputElement1);
  26. divElement.appendChild(inputElement2);
  27. var outIdDivElement = document.getElementById("outId");
  28. outIdDivElement.appendChild(divElement);
  29. //判断5次生效的情况
  30. count++;
  31. if(count==5){
  32. addButton.disabled=true;
  33. }
  34. }
  35. </script>
  36. <body>
  37. <form action="${pageContext.request. contextPath}/UploadServlet" method="post" enctype="multipart/form-data">
  38. <table border="1px" align="center">
  39. <caption>上传文件</caption>
  40. <tr>
  41. <th>用户名:</th>
  42. <td><input type="text" name="username"/></td>
  43. </tr>
  44. <tr>
  45. <th>文件名:</th>
  46. <td><input type="file" name="upfile"/>
  47. <input type="button" value="删除"/>
  48. </td>
  49. </tr>
  50. <td colspan="2" align="center">
  51. <div id="outId">
  52. <%--<div>
  53. <input type="file" name="upfile"/>
  54. <input type="button" name="删除"/>
  55. </div> --%>
  56. </div>
  57. </td>
  58. <tr>
  59. <td colspan="2" align="center">
  60. <input type="button" value="添加上传文件" onclick="addFile(this)"/>
  61. </td>
  62. </tr>
  63. <tr>
  64. <td align="center"><input type="submit" value="上传"/></td>
  65. <td align="center"><a href="${pageContext.request.contextPath}/ListFileServlet">下载列表</a></td>
  66. </tr>
  67. </table>
  68. </form>
  69. </body>
  70. </html>



复制代码
回复 使用道具 举报
上传的部分有问题,,求帮忙看下那部分的就可以了,谢谢啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马