X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmir%2Fmisc%2FWebdbMultipartRequest.java;h=5b1871fa3b9070ad841b944d2cc17777df2a8afc;hb=07c30d26fa01513214528c35f3004952f3d6a890;hp=0fd02161906a81309803b9185761394803070a99;hpb=5bf2a1fa11c1529a731ab6b4521b8254c1fa100f;p=mir.git diff --git a/source/mir/misc/WebdbMultipartRequest.java b/source/mir/misc/WebdbMultipartRequest.java index 0fd02161..5b1871fa 100755 --- a/source/mir/misc/WebdbMultipartRequest.java +++ b/source/mir/misc/WebdbMultipartRequest.java @@ -18,53 +18,109 @@ import com.oreilly.servlet.*; public class WebdbMultipartRequest { - HttpServletRequest req=null; - HashMap parameters = new HashMap(); - MultipartParser mp=null; - byte[] uploadData=null; - String fileName=null; + HttpServletRequest req=null; + Hashtable parameters = new Hashtable(); + MultipartParser mp=null; + public static ArrayList requestList; - public WebdbMultipartRequest(HttpServletRequest theReq) throws IOException - { - req=theReq; - mp = new MultipartParser(req, 1024*8192); // maximum eight megabyte - _evaluateRequest(); - } + public WebdbMultipartRequest(HttpServletRequest theReq) throws IOException + { + req=theReq; + int maxSize = Integer.parseInt(MirConfig.getProp("MaxMediaUploadSize")); + mp = new MultipartParser(req, 1024*maxSize); + requestList = new ArrayList(); + _evaluateRequest(); + } - public HashMap getParameters(){ - return parameters; - } + /** + * The following comment and some code was adapted from the Oreilley cos.jar + * package. -mh 2001.09.20 + * + * Returns all the parameters as a HashMap of Strings, any parameter + * that sent without a value will be null. A value + * is guaranteed to be in its normal, decoded form. If A parameter + * has multiple values, only the last one is returned (for backward + * compatibility). For parameters with multiple values, it's possible + * the last "value" may be null. + * + * @return A HashMap of String representations of the parameter values. + */ + public HashMap getParameters(){ + HashMap pHash = new HashMap(); + String value = new String(); - public byte[] getMedia() { - return uploadData; - } + Enumeration Keys = parameters.keys(); + while(Keys.hasMoreElements()) { + String KeyNm = (String)Keys.nextElement(); + Vector values = (Vector)parameters.get(KeyNm); + if (values == null || values.size() == 0) { + value = null; + } else { + value = (String)values.elementAt(values.size() - 1); + } //endif + pHash.put(KeyNm, value); + } // end while + return pHash; + } - public String getFilename() { - return fileName; - } + /** + * The following code and comment stolen from oreilley cos.jar. + * -mh. 2001.09.20 + * + * Returns the values of the named parameter as a String array, or null if + * the parameter was not sent. The array has one entry for each parameter + * field sent. If any field was sent without a value that entry is stored + * in the array as a null. The values are guaranteed to be in their + * normal, decoded form. A single value is returned as a one-element array. + * + * @param name the parameter name. + * @return the parameter values. + */ + public String[] getParameterValues(String name) { + try { + Vector values = (Vector)parameters.get(name); + if (values == null || values.size() == 0) { + return null; + } + String[] valuesArray = new String[values.size()]; + values.copyInto(valuesArray); + return valuesArray; + } + catch (Exception e) { + return null; + } + } - private void _evaluateRequest() throws IOException{ + private void _evaluateRequest() throws IOException{ + + Part part; + int i = 0; + while ((part = mp.readNextPart()) != null) { + String name = part.getName(); + if (part.isParam()) { + // It's a parameter part, add it to the vector of values + ParamPart paramPart = (ParamPart) part; + String value = paramPart.getStringValue(); + Vector existingValues = (Vector)parameters.get(name); + if (existingValues == null) { + existingValues = new Vector(); + parameters.put(name, existingValues); + } + existingValues.addElement(value); + } + else if (part.isFile()) { + // nur das erste uploadfile beruecksichtigen + FilePart filePart = (FilePart) part; + String fn = filePart.getFileName(); + if (filePart.getFileName() != null) { + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + filePart.writeTo(byteStream); + requestList.add(i,new MpRequest(byteStream.toByteArray(),filePart.getFileName(),filePart.getContentType())); + i++; + } + } + } // while */ + } - Part part; - while ((part = mp.readNextPart()) != null) { - String name = part.getName(); - if (part.isParam()) { - // It's a parameter part, add it to the vector of values - ParamPart paramPart = (ParamPart) part; - String value = paramPart.getStringValue(); - parameters.put(name,value); - } - else if (part.isFile()) { - // nur das erste uploadfile beruecksichtigen - FilePart filePart = (FilePart) part; - fileName = filePart.getFileName(); - if (fileName != null) { - ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); - filePart.writeTo(byteStream); - uploadData=byteStream.toByteArray(); - } - } - } // while */ - } }