fileupload

来源:互联网 发布:c语言之父写的书 编辑:程序博客网 时间:2024/05/13 15:37

commons-fileupload需要commons-io支持。

1. 创建一个file,如果它的父节点不存在,则要mkdirs,然后createNewFile,否则直接createNewFile。

2. 用一个multipart/form-data的form,除了file类型的,普通文本类型的也可以,虽然request.getParameter得不到,但是通过fileupload可以得到。

3. upload.parseRequest(request).iterator()只能用一次,解决办法是List list = upload.parseRequest(request); list.iterator();分段进行,parse一次,iterator自然可以用多次。

package com.kiln;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.Calendar;import java.util.Date;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileItemFactory;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/** * Servlet implementation class Upload */public class Upload extends HttpServlet {private static final long serialVersionUID = 1L;/** * @see HttpServlet#HttpServlet() */public Upload() {super();// TODO Auto-generated constructor stub}/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse *      response) */protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub}private void createFile(File file){if(!file.exists()){String ps = file.getParent();if(ps!=null){File p = new File(ps);if(!p.exists())p.mkdirs();}try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {boolean isMultipart = ServletFileUpload.isMultipartContent(request);if (isMultipart) {FileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);Iterator items;response.setContentType("text/html");response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();try {String id = null;List list =  upload.parseRequest(request);items = list.iterator();while(items.hasNext()){FileItem item = (FileItem) items.next();if(item.isFormField()){id = item.getString();break;}}if(id==null||id.equals("")){out.println("{res:false}");out.println();return;}items = list.iterator();while (items.hasNext()) {FileItem item = (FileItem) items.next();if (!item.isFormField()) {String name = item.getName();String fileName = name.substring(name.lastIndexOf('/') + 1, name.length());String extend = fileName.substring(fileName.lastIndexOf('.'),fileName.length());Calendar c = Calendar.getInstance();c.setTime( new Date());StringBuffer fN = new StringBuffer(id);fN.append(c.get(Calendar.YEAR));fN.append(c.get(Calendar.MONTH));fN.append(c.get(Calendar.DAY_OF_MONTH));fN.append(c.get(Calendar.HOUR_OF_DAY));fN.append(c.get(Calendar.MINUTE));fN.append(c.get(Calendar.SECOND));fN.append(extend);fileName = fN.toString();String path = request.getRealPath("file")+ File.separatorChar + fileName;File uploadedFile = new File(path);createFile(uploadedFile);item.write(uploadedFile);String returnPath = "http://localhost:8080"+request.getContextPath()+"/file/"+fileName;out.print("{url:"+returnPath+"}");out.close();}}} catch (Exception e) {e.printStackTrace();}}}}