From 79f7c2e490a02c058ec749cacc93cba84d5d5df3 Mon Sep 17 00:00:00 2001 From: jeb228 Date: Tue, 29 Jun 2010 20:00:41 +0000 Subject: [PATCH] Bug fix -- this was only parsing the parameters that were in the POST body -- not the ones in the URL itself. --- .../MultipartHttpServletRequest.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java index a05d7c96f..aa9f78582 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java @@ -4,6 +4,8 @@ package edu.cornell.mannlib.vitro.webapp.filestorage.uploadrequest; import java.io.File; import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; @@ -50,6 +52,8 @@ class MultipartHttpServletRequest extends FileUploadServletRequest { File tempDir = figureTemporaryDirectory(request); ServletFileUpload upload = createUploadHandler(maxFileSize, tempDir); + parseQueryString(request.getQueryString(), parameters); + List items = parseRequestIntoFileItems(request, upload); for (FileItem item : items) { // Process a regular form field @@ -73,6 +77,45 @@ class MultipartHttpServletRequest extends FileUploadServletRequest { request.setAttribute(FILE_ITEM_MAP, this.files); } + /** + * Pull any parameters out of the URL. + */ + private void parseQueryString(String queryString, + Map> parameters) { + log.debug("Query string is : '" + queryString + "'"); + if (queryString != null) { + String[] pieces = queryString.split("&"); + + for (String piece : pieces) { + int equalsHere = piece.indexOf('='); + if (piece.trim().isEmpty()) { + // Ignore an empty piece. + } else if (equalsHere <= 0) { + // A parameter without a value. + addToParameters(parameters, decode(piece), ""); + } else { + // A parameter with a value. + String key = piece.substring(0, equalsHere); + String value = piece.substring(equalsHere + 1); + addToParameters(parameters, decode(key), decode(value)); + } + } + } + log.debug("Parameters from query string are: " + parameters); + } + + /** + * Remove any special URL-style encoding. + */ + private String decode(String encoded) { + try { + return URLDecoder.decode(encoded, "UTF-8"); + } catch (UnsupportedEncodingException e) { + log.error(e, e); + return encoded; + } + } + /** * Find the temporary storage directory for this webapp. */