/******************************************************************************* * * Copyright (c) 2004-2009 Oracle Corporation. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * * Kohsuke Kawaguchi * * *******************************************************************************/ package hudson.util; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import javax.servlet.http.HttpServletRequest; import javax.servlet.ServletException; import java.util.List; import java.util.Map; import java.util.HashMap; /** * Wraps commons file-upload and handles a "multipart/form-data" form submisison * (that often includes file upload.) * * @author Kohsuke Kawaguchi */ public class MultipartFormDataParser { private final ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); private final Map<String, FileItem> byName = new HashMap<String, FileItem>(); public MultipartFormDataParser(HttpServletRequest request) throws ServletException { try { for (FileItem fi : (List<FileItem>) upload.parseRequest(request)) { byName.put(fi.getFieldName(), fi); } } catch (FileUploadException e) { throw new ServletException(e); } } public String get(String key) { FileItem fi = byName.get(key); if (fi == null) { return null; } return fi.getString(); } public FileItem getFileItem(String key) { return byName.get(key); } /** * If any file is created on the disk, delete them all. Even if this method * is not called, the resource will be still cleaned up later by GC. */ public void cleanUp() { for (FileItem item : byName.values()) { item.delete(); } } }