/****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * * under the terms version 2 of the GNU General Public License as published * * by the Free Software Foundation. This program is distributed in the hope * * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * For the text or an alternative of this public license, you may reach us * * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * * or via info@compiere.org or http://www.compiere.org/license.html * *****************************************************************************/ package org.compiere.util; import java.io.DataInputStream; import java.io.IOException; import java.util.logging.Level; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import org.apache.ecs.xhtml.form; import org.apache.ecs.xhtml.input; import org.apache.ecs.xhtml.label; /** * Web File Upload utility. * Based on code like: *
*
* @author Jorg Janke * @version $Id: FileUpload.java,v 1.2 2006/07/30 00:51:05 jjanke Exp $ */ @Deprecated(forRemoval = true, since = "11") public class FileUpload { /** * Create Upload Form. * You need to add the (hidden) parameter * @param action form action * @return form */ public static form createForm (String action) { form upload = new form(action, form.METHOD_POST, form.ENC_UPLOAD); upload.addElement(new label ("File").setFor("file")); //Browse Button //upload.addElement(new input (input.TYPE_FILE, "file", "").setSize(40)); String textbtn = "file"; String text = "Browse"; input filebtn = new input(input.TYPE_FILE, textbtn, " "+text); filebtn.setSize(40); filebtn.setID(text); filebtn.setClass("filebtn"); upload.addElement(filebtn); //upload Button //upload.addElement(new input (input.TYPE_SUBMIT, "upload", "Upload")); textbtn = "upload"; text = "Upload"; input submitbtn = new input(input.TYPE_SUBMIT, textbtn, " "+text); submitbtn.setID(text); submitbtn.setClass("submitbtn"); upload.addElement(submitbtn); return upload; } // createForm /************************************************************************** * Upload File from requesr * @param request request */ public FileUpload (HttpServletRequest request) { super (); try { m_error = upload (request); } catch (Exception e) { log.log(Level.SEVERE, "FileUpload", e); m_error = e.getLocalizedMessage(); if (m_error == null || m_error.length() == 0) m_error = e.toString(); } } // FileUpload /** Logger */ protected CLogger log = CLogger.getCLogger(getClass()); /** File Name */ private String m_fileName = null; /* File Data */ private byte[] m_data = null; /** Error Message */ private String m_error = null; /** Request Info as Data String */ private String m_requestDataString = null; /** * @return Returns the data. */ public byte[] getData () { return m_data; } // getData /** * @return Returns the actual fileName (without path). */ public String getFileName () { if (m_fileName != null) // eliminate path { int index = Math.max(m_fileName.lastIndexOf('/'), m_fileName.lastIndexOf('\\')); if (index > 0) return m_fileName.substring(index+1); } return m_fileName; } // getFileName /** * @return Returns the error message or null. */ public String getError () { return m_error; } // getError /************************************************************************** * Upload File * @param request request * @throws ServletException * @throws IOException * @return error message or null */ private String upload (HttpServletRequest request) throws ServletException, IOException { final int MAX_KB = 250; // Max Upload Size in kB // int formDataLength = request.getContentLength(); String contentType = request.getContentType(); int index = contentType.lastIndexOf('='); String boundary = contentType.substring(index+1); if (log.isLoggable(Level.FINE)) log.fine(formDataLength + " - " + boundary); int sizeKB = formDataLength/1024; if (sizeKB > MAX_KB) // 250k { log.warning("File too large " + sizeKB); return "File too large = " + sizeKB + "kB - Allowed = " + MAX_KB + "kB"; } DataInputStream in = new DataInputStream (request.getInputStream()); byte[] data = new byte[formDataLength]; int bytesRead = 0; int totalBytesRead = 0; while (totalBytesRead < formDataLength) { bytesRead = in.read(data, totalBytesRead, formDataLength); totalBytesRead += bytesRead; } // Convert to String for easy manipulation m_requestDataString = new String (data, "ISO-8859-1"); if (m_requestDataString.length() != data.length) return "Internal conversion Error"; // File Name: // Content-Disposition: form-data; name="file"; filename="C:\Documents and Settings\jjanke\My Documents\desktop.ini" index = m_requestDataString.indexOf("filename=\""); m_fileName = m_requestDataString.substring(index+10); index = m_fileName.indexOf('"'); if (index < 1) return "No File Name"; m_fileName = m_fileName.substring(0, index); if (log.isLoggable(Level.FINE)) log.fine("upload - " + m_fileName); // Content: // Content-Disposition: form-data; name="file"; filename="C:\Documents and Settings\jjanke\My Documents\desktop.ini" // Content-Type: application/octet-stream // // [DeleteOnCopy] // Owner=jjanke // Personalized=5 // PersonalizedName=My Documents // // -----------------------------7d433475038e int posStart = m_requestDataString.indexOf("filename=\""); posStart = m_requestDataString.indexOf("\n",posStart)+1; // end of Context-Disposition posStart = m_requestDataString.indexOf("\n",posStart)+1; // end of Content-Type posStart = m_requestDataString.indexOf("\n",posStart)+1; // end of empty line int posEnd = m_requestDataString.indexOf(boundary, posStart)-4; int length = posEnd-posStart; // if (log.isLoggable(Level.FINE)) log.fine("uploadFile - Start=" + posStart + ", End=" + posEnd + ", Length=" + length); // Final copy m_data = new byte[length]; for (int i = 0; i < length; i++) m_data[i] = data[posStart+i]; return null; } // uploadFile /** * Get MultiPart Form Parameter. * Assumes single line (no cr) * Request -----------------------------7d433475038e Content-Disposition: form-data; name="R_Request_ID" 1000000 -----------------------------7d433475038e-- * @param parameterName name of parameter * @return parameter or null of mot found */ public String getParameter (String parameterName) { if (m_requestDataString == null) return null; String retValue = null; String search = "name=\"" + parameterName + "\""; int index = m_requestDataString.indexOf(search); if (index > 0) { retValue = m_requestDataString.substring(index); retValue = retValue.substring(retValue.indexOf("\n")+1); // eol retValue = retValue.substring(retValue.indexOf("\n")+1); // empty line retValue = retValue.substring(0,retValue.indexOf("\n")); // cr retValue = retValue.trim(); } else { log.warning("getParameter Not found - " + parameterName); return null; } if (log.isLoggable(Level.FINE)) log.fine("getParameter = " + parameterName + "=" + retValue); return retValue; } // getMultiPartParameter /** * Get Multi Part Parameter As Int * @param parameterName name * @return result or 0 */ public int getParameterAsInt (String parameterName) { String result = getParameter (parameterName); try { if (result != null && result.length() > 0) return Integer.parseInt(result); } catch (Exception e) { log.log(Level.SEVERE, "getParameterAsInt - " + parameterName + "=" + result, e); } return 0; } // getParameterAsInt /** * String Representation * @return info */ public String toString () { StringBuilder sb = new StringBuilder ("FileUpload["); if (m_fileName != null) sb.append(m_fileName); if (m_error != null) sb.append(";Error=").append(m_error); if (m_data != null) sb.append(";Length=").append(m_data.length); sb.append ("]"); return sb.toString (); } // toString } // FileUpload