def parse_file_upload(header_dict, post_data): "Returns a tuple of (POST URLQuery, FILES URLQuery)" raw_message = '\r\n'.join(['%s:%s' % pair for pair in header_dict.items()]) raw_message += '\r\n\r\n' + post_data msg = email.message_from_string(raw_message) POST = urlparse.URLQuery() FILES = urlparse.URLQuery() for submessage in msg.get_payload(): if isinstance(submessage, email.Message.Message): cd = httputils.get_header(submessage['Content-Disposition']) if cd.parameters.has_key('filename'): assert type(submessage.get_payload()) is not list, \ "Nested MIME messages are not supported" if not cd.parameters['filename'].strip(): continue # IE submits the full path, so trim everything but the basename. # (We can't use os.path.basename because it expects Linux paths.) filename = cd.parameters['filename'][cd.parameters['filename'].rfind("\\")+1:] FILES.appendlist(cd.parameters['name'], { 'filename': filename, 'content-type': (submessage.has_key('Content-Type') and submessage['Content-Type'] or None), 'content': submessage.get_payload(), }) else: POST.appendlist(cd.parameters['name'], submessage.get_payload()) return POST, FILES
def parse_file_upload(header_dict, post_data): "Returns a tuple of (POST URLQuery, FILES URLQuery)" raw_message = '\r\n'.join(['%s:%s' % pair for pair in header_dict.items()]) raw_message += '\r\n\r\n' + post_data msg = email.message_from_string(raw_message) POST = urlparse.URLQuery() FILES = urlparse.URLQuery() for submessage in msg.get_payload(): if isinstance(submessage, email.Message.Message): cd = httputils.get_header(submessage['Content-Disposition']) if cd.parameters.has_key('filename'): assert type(submessage.get_payload()) is not list, \ "Nested MIME messages are not supported" if not cd.parameters['filename'].strip(): continue # IE submits the full path, so trim everything but the basename. # (We can't use os.path.basename because it expects Linux paths.) filename = cd.parameters['filename'][cd.parameters['filename']. rfind("\\") + 1:] FILES.appendlist( cd.parameters['name'], { 'filename': filename, 'content-type': (submessage.has_key('Content-Type') and submessage['Content-Type'] or None), 'content': submessage.get_payload(), }) else: POST.appendlist(cd.parameters['name'], submessage.get_payload()) return POST, FILES
def _make_headers(self): if self._headersobjects: return self._headersobjects else: rv = httputils.Headers() for ht in self._headers: ht = ht.strip() if ht: rv.append(httputils.get_header(ht)) self._headersobjects = rv self._headers = [] return rv