FileUpload.java
资源名称:JAVAshop.rar [点击查看]
上传用户:sxychgz
上传日期:2019-04-21
资源大小:4772k
文件大小:3k
源码类别:
电子政务应用
开发平台:
Java
- package com.bjsxt.shopping.util.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletConfig;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.fileupload.*;
- import java.util.*;
- import java.util.regex.*;
- import java.io.*;
- import org.apache.commons.fileupload.servlet.*;
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- public class FileUpload extends HttpServlet {
- //BLOB
- @Override
- public void init(ServletConfig config) throws ServletException {
- this.config = config;
- }
- private ServletConfig config = null;
- private File tempPath = new File("D:\upload\temp\"); // 用于存放临时文件的目录
- public void destroy() {
- config = null;
- super.destroy();
- }
- public void doPost(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- int id = -1;
- String uploadPath = config.getInitParameter("uploadPath"); // 用于存放上传文件的目录
- res.setContentType("text/html; charset=GB2312");
- PrintWriter out = res.getWriter();
- System.out.println(req.getContentLength());
- System.out.println(req.getContentType());
- DiskFileItemFactory factory = new DiskFileItemFactory();
- // maximum size that will be stored in memory
- factory.setSizeThreshold(4096);
- // the location for saving data that is larger than getSizeThreshold()
- factory.setRepository(tempPath);
- ServletFileUpload upload = new ServletFileUpload(factory);
- // maximum size before a FileUploadException will be thrown
- upload.setSizeMax(1000000);
- try {
- List fileItems = upload.parseRequest(req);
- // assume we know there are two files. The first file is a small
- // text file, the second is unknown and is written to a file on
- // the server
- Iterator iter = fileItems.iterator();
- // 正则匹配,过滤路径取文件名
- String regExp = ".+\\(.+)$";
- // 过滤掉的文件类型
- String[] errorType = { ".exe", ".com", ".cgi", ".jsp" };
- Pattern p = Pattern.compile(regExp);
- while (iter.hasNext()) {
- FileItem item = (FileItem) iter.next();
- if(item.isFormField()) {
- if(item.getFieldName().equals("id")) {
- id = Integer.parseInt(item.getString());
- }
- }
- // 忽略其他不是文件域的所有表单信息
- if (!item.isFormField()) {
- String name = item.getName();
- long size = item.getSize();
- if ((name == null || name.equals("")) && size == 0)
- continue;
- Matcher m = p.matcher(name);
- boolean result = m.find();
- if (result) {
- for (int temp = 0; temp < errorType.length; temp++) {
- if (m.group(1).endsWith(errorType[temp])) {
- throw new IOException(name + ": wrong type");
- }
- }
- try {
- // 保存上传的文件到指定的目录
- // 在下文中上传文件至数据库时,将对这里改写
- item.write(new File(uploadPath + id + ".jpg"));
- out.print(name + " " + size + "<br>");
- } catch (Exception e) {
- out.println(e);
- }
- } else {
- throw new IOException("fail to upload");
- }
- }
- }
- } catch (IOException e) {
- out.println(e);
- } catch (FileUploadException e) {
- out.println(e);
- }
- }
- }