FileUpload.java
上传用户:lsj999sz
上传日期:2022-06-15
资源大小:4717k
文件大小:3k
源码类别:

ICQ/即时通讯

开发平台:

Java

  1. package com.bjsxt.shopping.util.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletConfig;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9.  
  10. import org.apache.commons.fileupload.*;
  11. import java.util.*;
  12. import java.util.regex.*;
  13. import java.io.*;
  14. import org.apache.commons.fileupload.servlet.*;
  15. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  16. public class FileUpload extends HttpServlet { 
  17. //BLOB
  18. @Override
  19. public void init(ServletConfig config) throws ServletException {
  20. this.config = config;
  21. }
  22. private ServletConfig config = null;
  23. private File tempPath = new File("D:\upload\temp\"); // 用于存放临时文件的目录
  24. public void destroy() {
  25. config = null;
  26. super.destroy();
  27. }
  28. public void doPost(HttpServletRequest req, HttpServletResponse res)
  29. throws ServletException, IOException {
  30. int id = -1;
  31. String uploadPath = config.getInitParameter("uploadPath"); // 用于存放上传文件的目录
  32. res.setContentType("text/html; charset=GB2312");
  33. PrintWriter out = res.getWriter();
  34. System.out.println(req.getContentLength());
  35. System.out.println(req.getContentType());
  36. DiskFileItemFactory factory = new DiskFileItemFactory();
  37. // maximum size that will be stored in memory
  38. factory.setSizeThreshold(4096);
  39. // the location for saving data that is larger than getSizeThreshold()
  40. factory.setRepository(tempPath);
  41. ServletFileUpload upload = new ServletFileUpload(factory);
  42. // maximum size before a FileUploadException will be thrown
  43. upload.setSizeMax(1000000);
  44. try {
  45. List fileItems = upload.parseRequest(req);
  46. // assume we know there are two files. The first file is a small
  47. // text file, the second is unknown and is written to a file on
  48. // the server
  49. Iterator iter = fileItems.iterator();
  50. // 正则匹配,过滤路径取文件名
  51. String regExp = ".+\\(.+)$";
  52. // 过滤掉的文件类型
  53. String[] errorType = { ".exe", ".com", ".cgi", ".jsp" };
  54. Pattern p = Pattern.compile(regExp);
  55. while (iter.hasNext()) {
  56. FileItem item = (FileItem) iter.next();
  57. if(item.isFormField()) {
  58. if(item.getFieldName().equals("id")) {
  59. id = Integer.parseInt(item.getString());
  60. }
  61. }
  62. // 忽略其他不是文件域的所有表单信息
  63. if (!item.isFormField()) {
  64. String name = item.getName();
  65. long size = item.getSize();
  66. if ((name == null || name.equals("")) && size == 0)
  67. continue;
  68. Matcher m = p.matcher(name);
  69. boolean result = m.find();
  70. if (result) {
  71. for (int temp = 0; temp < errorType.length; temp++) {
  72. if (m.group(1).endsWith(errorType[temp])) {
  73. throw new IOException(name + ": wrong type");
  74. }
  75. }
  76. try {
  77. // 保存上传的文件到指定的目录
  78. // 在下文中上传文件至数据库时,将对这里改写
  79. item.write(new File(uploadPath + id + ".jpg"));
  80. out.print(name + "&nbsp;&nbsp;" + size + "<br>");
  81. } catch (Exception e) {
  82. out.println(e);
  83. }
  84. } else {
  85. throw new IOException("fail to upload");
  86. }
  87. }
  88. }
  89. } catch (IOException e) {
  90. out.println(e);
  91. } catch (FileUploadException e) {
  92. out.println(e);
  93. }
  94. }
  95. }