1.1 --- a/WebStack/JavaServlet.py Sat Aug 28 17:01:15 2004 +0000
1.2 +++ b/WebStack/JavaServlet.py Sat Aug 28 20:24:19 2004 +0000
1.3 @@ -8,7 +8,12 @@
1.4 from StringIO import StringIO
1.5 from Helpers.Request import Cookie, get_body_fields, get_storage_items
1.6 import javax.servlet.http.Cookie
1.7 -from cgi import FieldStorage
1.8 +
1.9 +# Form data decoding.
1.10 +
1.11 +import javax.mail.internet.MimeMessage
1.12 +import javax.mail.Session
1.13 +import java.util.Properties
1.14
1.15 class Stream:
1.16
1.17 @@ -245,26 +250,13 @@
1.18 NOTE: not be pertinent.
1.19 """
1.20
1.21 - # Where the content type is "multipart/form-data", we use the
1.22 - # FieldStorage class from the standard library. Otherwise, we use the
1.23 - # Servlet API's parameter access methods.
1.24 + # Where the content type is "multipart/form-data", we use javax.mail
1.25 + # functionality. Otherwise, we use the Servlet API's parameter access
1.26 + # methods.
1.27
1.28 if self.get_content_type() and self.get_content_type().content_type == "multipart/form-data":
1.29 -
1.30 - # NOTE: Taken from WebStack.CGI.get_fields_from_body.
1.31 -
1.32 - if self.storage_body is None:
1.33 - self.storage_body = FieldStorage(fp=self.get_request_stream(), headers=self.get_headers(),
1.34 - environ={"REQUEST_METHOD" : self.get_request_method()}, keep_blank_values=1)
1.35 + fields = self._get_fields_from_message()
1.36
1.37 - # Avoid strange design issues with FieldStorage by checking the internal
1.38 - # field list directly.
1.39 -
1.40 - if self.storage_body.list is not None:
1.41 -
1.42 - # Traverse the storage, finding each field value.
1.43 -
1.44 - fields = get_body_fields(get_storage_items(self.storage_body), None)
1.45 else:
1.46 fields = {}
1.47 parameter_map = self.request.getParameterMap()
1.48 @@ -440,6 +432,38 @@
1.49
1.50 self.user = username
1.51
1.52 + # Special Java-specific methods.
1.53 +
1.54 + def _get_fields_from_message(self):
1.55 +
1.56 + "Get fields from a multipart message."
1.57 +
1.58 + session = javax.mail.Session.getDefaultInstance(java.util.Properties())
1.59 + message = javax.mail.internet.MimeMessage(session, self.get_request_stream())
1.60 + content = message.getContent()
1.61 + return self._get_fields_from_multipart(content)
1.62 +
1.63 + def _get_fields_from_multipart(self, content):
1.64 +
1.65 + "Get fields from multipart 'content'."
1.66 +
1.67 + fields = {}
1.68 + for i in range(0, content.getCount()):
1.69 + part = content.getBodyPart(i)
1.70 + subcontent = part.getContent()
1.71 +
1.72 + # Record string content.
1.73 +
1.74 + if type(subcontent) == type(""):
1.75 + name = part.getDisposition()
1.76 + if not fields.has_key(name):
1.77 + fields[name] = []
1.78 + fields[name].append(subcontent)
1.79 + else:
1.80 + fields.update(self._get_fields_from_multipart(subcontent))
1.81 +
1.82 + return fields
1.83 +
1.84 class Session:
1.85
1.86 """