开发笔记——ServletFileUpload

来源:互联网 发布:关闭多台linux系统脚本 编辑:程序博客网 时间:2024/05/01 04:53

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);}@Overridepublic 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);//最大上传10MString 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 blocke.printStackTrace();}catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (IOException e) {// TODO Auto-generated catch blocke.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部署的话,就没问题了

原创粉丝点击