1.下面是一个servlet,在dopost方法中处理图片上传
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import com.bluetorch.image.service.ImageService; /** * Servlet implementation class RegisterController */ @WebServlet(name = "ImageServlet", urlPatterns = "/Image") public class ImageServlet extends HttpServlet { private static final long serialVersionUID = 1L; Logger logger = Logger.getLogger(this.getClass()); /** * @see HttpServlet#HttpServlet() */ public ImageServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/xml"); String url = new Upload(request).getUrl(); System.out.println(url); } @Override public void init() throws ServletException { } }
2.Upload类
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import javax.servlet.http.HttpServletRequest; 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 org.apache.log4j.Logger; public class Upload { Logger logger = null; HttpServletRequest request = null; public Upload(HttpServletRequest request){ this.request = request; this.logger = Logger.getLogger(Upload.class); } //得到图片文件的路径 public String getUrl() { String paramValue = ""; String folder = "/upload"; String path = request.getSession().getServletContext().getRealPath(folder); logger.debug("<path>" + path); System.out.println("<path>" + path); DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File(path)); factory.setSizeThreshold(1024*1024); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(1024*1024*10);//最大上传10M String name = null; String filename = null; try { List<FileItem> itemList = (List<FileItem>) upload.parseRequest(request); for(FileItem item : itemList){ name = item.getFieldName(); if(item.isFormField()){ }else{ String value = item.getName(); if("".equals(value)){ return null; } int start = value.lastIndexOf("\\"); filename = value.substring(start + 1); OutputStream out = new FileOutputStream(new File(path, filename)); InputStream in; in = item.getInputStream(); int length = 0; byte[] buf = new byte[1024]; logger.debug("获取上传文件的总共的容量:" + item.getSize()); // in.read(buf) 每次读到的数据存放在 buf 数组中 while ((length = in.read(buf)) != -1) { // 在 buf 数组中 取出数据 写到 (输出流)磁盘上 out.write(buf, 0, length); } in.close(); out.close(); } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return getDefaultUrl(filename, folder); } //得到系统图片的路径 public String getDefaultUrl(String img, String folder){ StringBuffer sb = new StringBuffer(); sb.append("http://"); // sb.append(request.getLocalAddr()); sb.append(request.getServerName()); // sb.append("域名"); sb.append(":"); sb.append(request.getServerPort()); sb.append(request.getContextPath()); sb.append(folder); sb.append("/"); sb.append(img); logger.debug("<path>" + sb.toString()); return sb.toString(); } }
这样就完成了,但是我在部署的时候出现了一些问题,如果用IDE工具部署的话,path的路径指向的是IDE工具生成的一个临时文件夹,得到的图片路径找不到图片。
直接用tomcat部署的话,就没问题了