jsp上传下载上篇

来源:互联网 发布:wamp mysql 无法启动 编辑:程序博客网 时间:2024/05/18 03:46

文件上传到本地磁盘同时将信息出入数据库:

上传JSP页面中利用js能添加多个文件同时上传:

[html] view plaincopy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7.   
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html>  
  10.   <head>  
  11.     <title>上传页面</title>  
  12.   
  13.   
  14. <script type="text/javascript">  
  15. function addfiles(){  
  16. var filesDiv = document.getElementById("files");  
  17. var fileInput = document.createElement("input");  
  18.   
  19. fileInput.type="file";  
  20. fileInput.name="浏览";  
  21.   
  22. var delButton = document.createElement("input");  
  23. delButton.type="button";  
  24. delButton.value="删除";  
  25.   
  26. delButton.onclick=function del(){  
  27. this.parentNode.parentNode.removeChild(this.parentNode);  
  28.   
  29. }  
  30. var div = document.createElement("div");  
  31. div.appendChild(fileInput);  
  32. div.appendChild(delButton);  
  33.   
  34. filesDiv.appendChild(div);  
  35. }  
  36.   
  37. </script>  
  38.   
  39.   </head>  
  40.     
  41.   <body>  
  42.     <form action="${pageContext.request.contextPath }/uploadServlet.do" method="post" enctype="multipart/form-data">  
  43.      <table>  
  44.      <tr>  
  45.      <td>用户名:</td><td><input type="text" name="username"/></td><td></td>   
  46.      </tr>  
  47.      <tr>  
  48.      <td></td><td><input type="button" value="添加文件" onclick="addfiles()"/></td><td></td>   
  49.      </tr>  
  50.      <tr>  
  51.      <td></td><td><input type="file" name="浏览"/></td><td></td>   
  52.      </tr>  
  53.      <tr>  
  54.      <td></td><td><div id="files"></div></td><td></td>   
  55.      </tr>  
  56.      <tr>  
  57.      <td></td><td><input type="submit" value="上传"/></td><td></td>   
  58.      </tr>  
  59.      </table>  
  60.     </form>  
  61.       
  62.     ${message}  
  63.   </body>  
  64. </html>  


最终要的是servlet中

[html] view plaincopy
  1. package cn.csdn.web.servlet;  
  2.   
  3.   
  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.io.UnsupportedEncodingException;  
  10. import java.sql.Blob;  
  11. import java.sql.SQLException;  
  12. import java.util.List;  
  13. import java.util.UUID;  
  14. import javax.servlet.ServletException;  
  15. import javax.servlet.http.HttpServlet;  
  16. import javax.servlet.http.HttpServletRequest;  
  17. import javax.servlet.http.HttpServletResponse;  
  18. import javax.sql.rowset.serial.SerialBlob;  
  19. import javax.sql.rowset.serial.SerialException;  
  20. import org.apache.commons.fileupload.FileItem;  
  21. import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;  
  22. import org.apache.commons.fileupload.FileUploadException;  
  23. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
  24. import org.apache.commons.fileupload.servlet.ServletFileUpload;  
  25. import sun.print.resources.serviceui;  
  26. import cn.csdn.web.dao.UploadDao;  
  27. import cn.csdn.web.dao.UploadDaoImpl;  
  28. import cn.csdn.web.domain.Upload;  
  29.   
  30. public class UploadFilesServlet extends HttpServlet {  
  31. /**  
  32.  * @author sword  
  33.  */  
  34. private static final long serialVersionUID = 1L;  
  35.   
  36. UploadDao uDao = new UploadDaoImpl();  
  37. Upload entity = new Upload();  
  38. @SuppressWarnings({ "unchecked", "unchecked" })  
  39. public void doGet(HttpServletRequest request, HttpServletResponse response)  
  40. throws ServletException, IOException {  
  41. request.setCharacterEncoding("utf-8");  
  42. try {  
  43. //1、创建工厂对象  
  44. DiskFileItemFactory factory = new DiskFileItemFactory();  
  45. //2、设置临时文件路径  
  46. factory.setRepository(new File("d:\\test"));  
  47. //3、得到上传文件解析器  
  48. ServletFileUpload upload = new ServletFileUpload(factory);  
  49. //4、处理乱码问题  
  50. upload.setHeaderEncoding("utf-8");  
  51. //5、设定文件上传大小限制  
  52. //upload.setSizeMax(1024*1024);  
  53. //6、进行解析  得到存放FileItem的List对象  
  54. List<FileItem> list ;  
  55. list = upload.parseRequest(request);  
  56. for(FileItem item : list){  
  57. if(item.isFormField()){  
  58. String paramName = item.getFieldName();  
  59. String paramValue = item.getString("utf-8");  
  60. System.out.println("普通输入项" + paramName + " = " + paramValue);  
  61.   
  62. entity.setName(paramValue);  
  63. }else{  
  64. //获取上传文件名  
  65. String fileName = item.getName();  
  66. //如果文件名有目录,则去掉目录部分,只保留文件名  
  67. fileName = fileName.substring(fileName.lastIndexOf("\\")+1);  
  68. System.out.println("name = " + fileName);  
  69.   
  70. if(!fileName.equals("")){  
  71. //处理同名问题  名字前加UUID处理  调用refactorFile方法  
  72. String uuidName = refactorFileName(fileName);  
  73. System.out.println("uuidName==="+uuidName);//测试代码  
  74. entity.setFileName(uuidName);//将信息存入到数据库中  
  75.   
  76. InputStream is = item.getInputStream();  
  77. //上传文件位置生成指定的二级路径  调用方法  
  78. String basepath = this.getServletContext().getRealPath("WEB-INF/upload");  
  79. String finalPath = generateFilePath(basepath,uuidName);//文件的完整路径+名字+后缀  
  80. String finalName = finalPath.substring(finalPath.indexOf("_")+1);//得到文件的真实名字  
  81. System.out.println("finalName==="+finalName);  
  82. entity.setFilePath(finalPath);//将信息存入到数据库中  
  83. entity.setFile(item.get());//将上传文件存入到数据库中  
  84.   
  85. File file = new File(finalPath);  
  86. FileOutputStream fos = new FileOutputStream(file);  
  87.   
  88. byte[] buffer = new byte[1024];  
  89. int len = 0;  
  90. while((len=is.read(buffer))!=-1){  
  91. fos.write(buffer, 0, len);  
  92. }  
  93.   
  94. uDao.insert(entity);  
  95.   
  96. fos.flush();  
  97. fos.close();  
  98. is.close();  
  99. item.delete();  
  100. request.setAttribute("message", "文件上传成功");    
  101.   
  102. }  
  103. }   
  104. }  
  105. }catch(FileSizeLimitExceededException e1){  
  106. e1.printStackTrace();  
  107. request.setAttribute("message", "上传文件尺寸太大!!!");  
  108. }catch(FileUploadException e){  
  109. e.printStackTrace();  
  110. request.setAttribute("message", "bbbb文件上传失败");  
  111.   
  112. }  
  113. request.getRequestDispatcher("/upload.jsp").forward(request, response);  
  114. }  
  115.   
  116.   
  117. private String generateFilePath(String basepath, String uuidName) {  
  118. int hashcode = uuidName.hashCode();  
  119. int dir1 = hashcode & 0xf;  
  120. int dir2 = (hashcode >> 4) & 0xf;  
  121.   
  122. String path = basepath+"\\"+dir1+"\\"+dir2+"\\";  
  123.   
  124. File f = new File(path);  
  125. if(!f.exists()){  
  126. f.mkdirs();  
  127. }  
  128. return path+uuidName;  
  129. }  
  130.   
  131.   
  132. private String refactorFileName(String fileName) {  
  133. return UUID.randomUUID().toString()+"_"+fileName;  
  134. }  
  135.   
  136.   
  137. public void doPost(HttpServletRequest request, HttpServletResponse response)  
  138. throws ServletException, IOException {  
  139. this.doGet(request, response);  
  140. }  
  141.   
  142.   
  143. }