Python google.appengine.ext.blobstore.create_upload_url() Examples

The following are 27 code examples of google.appengine.ext.blobstore.create_upload_url(). You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may also want to check out all available functions/classes of the module google.appengine.ext.blobstore , or try the search function .
Example #1
Source File: mr_main.py    From locality-sensitive-hashing with MIT License 6 votes vote down vote up
def get(self):
        user = users.get_current_user()
        username = user.nickname()

        first = FileMetadata.getFirstKeyForUser(username)
        last = FileMetadata.getLastKeyForUser(username)

        q = FileMetadata.all()
        q.filter("__key__ >", first)
        q.filter("__key__ < ", last)
        results = q.fetch(10)

        items = [result for result in results]
        length = len(items)

        upload_url = blobstore.create_upload_url("/upload")

        self.response.out.write(self.template_env.get_template("index.html").render(
            {"username": username,
             "items": items,
             "length": length,
             "upload_url": upload_url})) 
Example #2
Source File: main.py    From appengine-mapreduce with Apache License 2.0 6 votes vote down vote up
def get(self):
    user = users.get_current_user()
    username = user.nickname()

    first = FileMetadata.getFirstKeyForUser(username)
    last = FileMetadata.getLastKeyForUser(username)

    q = FileMetadata.all()
    q.filter("__key__ >", first)
    q.filter("__key__ < ", last)
    results = q.fetch(10)

    items = [result for result in results]
    length = len(items)

    bucket_name = app_identity.get_default_gcs_bucket_name()
    upload_url = blobstore.create_upload_url("/upload",
                                             gs_bucket_name=bucket_name)

    self.response.out.write(self.template_env.get_template("index.html").render(
        {"username": username,
         "items": items,
         "length": length,
         "upload_url": upload_url})) 
Example #3
Source File: blob_upload_test.py    From python-compat-runtime with Apache License 2.0 6 votes vote down vote up
def test_check_line_endings(self):
    """Ensure the upload message uses correct RFC-2821 line terminators."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

value
--================1234==--""")

    upload_url = blobstore.create_upload_url('/success')

    request_path = urlparse.urlparse(upload_url)[2]
    self.environ['PATH_INFO'] = request_path
    self.environ['CONTENT_TYPE'] = (
        'multipart/form-data; boundary="================1234=="')

    status, _, _, _, forward_body = self.run_dispatcher(upload_data)

    self.assertEquals('200 OK', status)
    forward_body = forward_body.replace('\r\n', '')
    self.assertEqual(forward_body.rfind('\n'), -1) 
Example #4
Source File: blob_upload_test.py    From python-compat-runtime with Apache License 2.0 6 votes vote down vote up
def test_bad_session(self):
    """Using a non-existant upload session causes an error."""
    upload_url = blobstore.create_upload_url('/success')

    # Get session key from upload url.
    session_key = upload_url.split('/')[-1]
    datastore.Delete(session_key)

    request_path = urlparse.urlparse(upload_url)[2]
    self.environ['PATH_INFO'] = request_path
    status, _, response_body, forward_environ, forward_body = (
        self.run_dispatcher())

    self.assertEquals('404 Not Found', status)
    self.assertIn('No such upload session: %s' % session_key, response_body)
    # Test that it did not forward.
    self.assertEquals(None, forward_environ)
    self.assertEquals(None, forward_body) 
Example #5
Source File: blob_upload_test.py    From python-compat-runtime with Apache License 2.0 6 votes vote down vote up
def test_base64(self):
    """Test automatic decoding of a base-64-encoded message."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"
Content-Transfer-Encoding: base64

%s
--================1234==--""" % base64.urlsafe_b64encode('value'))

    upload_url = blobstore.create_upload_url('/success')

    upload, forward_environ, _ = self._run_test_success(
        upload_data, upload_url)

    self.assertEquals('/success', forward_environ['PATH_INFO'])
    self.assertEquals(
        ('form-data', {'filename': 'stuff.txt', 'name': 'field1'}),
        cgi.parse_header(upload['content-disposition'])) 
Example #6
Source File: blob_upload_test.py    From python-compat-runtime with Apache License 2.0 6 votes vote down vote up
def test_success_full_success_url(self):
    """Request flow with a success url containing protocol, host and port."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

value
--================1234==--""")

    # The scheme, host and port should all be ignored.
    upload_url = blobstore.create_upload_url(
        'https://example.com:1234/success?foo=bar')

    upload, forward_environ, _ = self._run_test_success(
        upload_data, upload_url)

    self.assertEquals('/success', forward_environ['PATH_INFO'])
    self.assertEquals('foo=bar', forward_environ['QUERY_STRING'])
    self.assertEquals(
        ('form-data', {'filename': 'stuff.txt', 'name': 'field1'}),
        cgi.parse_header(upload['content-disposition'])) 
Example #7
Source File: blob_upload_test.py    From python-compat-runtime with Apache License 2.0 6 votes vote down vote up
def test_success_with_bucket(self):
    """Basic dispatcher request flow."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

value
--================1234==--""")

    upload_url = blobstore.create_upload_url('/success?foo=bar',
                                             gs_bucket_name='my_test_bucket')

    upload, forward_environ, forward_body = self._run_test_success(
        upload_data, upload_url)

    self.assertEquals('/success', forward_environ['PATH_INFO'])
    self.assertEquals('foo=bar', forward_environ['QUERY_STRING'])
    self.assertEquals(
        ('form-data', {'filename': 'stuff.txt', 'name': 'field1'}),
        cgi.parse_header(upload['content-disposition']))
    self.assertIn('X-AppEngine-Cloud-Storage-Object: /gs/%s' % 'my_test_bucket',
                  forward_body) 
Example #8
Source File: blob_upload_test.py    From python-compat-runtime with Apache License 2.0 6 votes vote down vote up
def test_success(self):
    """Basic dispatcher request flow."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

value
--================1234==--""")

    upload_url = blobstore.create_upload_url('/success?foo=bar')

    upload, forward_environ, _ = self._run_test_success(
        upload_data, upload_url)

    self.assertEquals('/success', forward_environ['PATH_INFO'])
    self.assertEquals('foo=bar', forward_environ['QUERY_STRING'])
    self.assertEquals(
        ('form-data', {'filename': 'stuff.txt', 'name': 'field1'}),
        cgi.parse_header(upload['content-disposition'])) 
Example #9
Source File: main.py    From python-docs-samples with Apache License 2.0 6 votes vote down vote up
def get(self):
        # [START gae_blobstore_upload_url]
        upload_url = blobstore.create_upload_url('/upload_photo')
        # [END gae_blobstore_upload_url]
        # [START gae_blobstore_upload_form]
        # To upload files to the blobstore, the request method must be "POST"
        # and enctype must be set to "multipart/form-data".
        self.response.out.write("""
<html><body>
<form action="{0}" method="POST" enctype="multipart/form-data">
  Upload File: <input type="file" name="file"><br>
  <input type="submit" name="submit" value="Submit">
</form>
</body></html>""".format(upload_url))
        # [END gae_blobstore_upload_form]


# [START gae_blobstore_upload_handler] 
Example #10
Source File: blob_upload_test.py    From browserscope with Apache License 2.0 6 votes vote down vote up
def test_success(self):
    """Basic dispatcher request flow."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

value
--================1234==--""")

    upload_url = blobstore.create_upload_url('/success?foo=bar')

    upload, forward_environ, _ = self._run_test_success(
        upload_data, upload_url)

    self.assertEquals('/success', forward_environ['PATH_INFO'])
    self.assertEquals('foo=bar', forward_environ['QUERY_STRING'])
    self.assertEquals(
        ('form-data', {'filename': 'stuff.txt', 'name': 'field1'}),
        cgi.parse_header(upload['content-disposition'])) 
Example #11
Source File: blobs.py    From locality-sensitive-hashing with MIT License 6 votes vote down vote up
def get(self):
        user = users.get_current_user()
        username = user.nickname()

        items = DatasetPB.all()
#         items = [result for result in results.fetch(10)]
#         for item in items:
#             logging.info('fn %s', item.blob_key)
        length = len(items)
        upload_url = blobstore.create_upload_url("/upload_blob")
        
#         Datazz.create(u'fn1', 'ol1')
#         Datazz.all()
#         Datazz.create('fn1', 'ol2')
#         Datazz.create('fn2', 'ol3')
#         Datazz.all()

        self.response.out.write(self.template_env.get_template("blobs.html").render(
            {"username": username,
             "items": items,
             "length": length,
             "upload_url": upload_url,
             "top_form_url": "blobs"})) 
Example #12
Source File: test_db_datastore.py    From locality-sensitive-hashing with MIT License 6 votes vote down vote up
def get(self):
        user = users.get_current_user()
        username = user.nickname()
        
        items = Matrix.all()
        for item in items:
            logging.info('item key %s blob_key %s, filename %s ', item.key.urlsafe(), item.file_key, item.filename)
        length = len(items)
        upload_url = blobstore.create_upload_url("/test_upload_blob")

        self.response.out.write(self.template_env.get_template("blobs.html").render(
            {"username": username,
             "items": items,
             "length": length,
             "upload_url": upload_url,
             "top_form_url": "test_db_datastore"})) 
Example #13
Source File: blob_upload_test.py    From browserscope with Apache License 2.0 6 votes vote down vote up
def test_check_line_endings(self):
    """Ensure the upload message uses correct RFC-2821 line terminators."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

value
--================1234==--""")

    upload_url = blobstore.create_upload_url('/success')

    request_path = urlparse.urlparse(upload_url)[2]
    self.environ['PATH_INFO'] = request_path
    self.environ['CONTENT_TYPE'] = (
        'multipart/form-data; boundary="================1234=="')

    status, _, _, _, forward_body = self.run_dispatcher(upload_data)

    self.assertEquals('200 OK', status)
    forward_body = forward_body.replace('\r\n', '')
    self.assertEqual(forward_body.rfind('\n'), -1) 
Example #14
Source File: blob_upload_test.py    From browserscope with Apache License 2.0 6 votes vote down vote up
def test_bad_session(self):
    """Using a non-existant upload session causes an error."""
    upload_url = blobstore.create_upload_url('/success')

    # Get session key from upload url.
    session_key = upload_url.split('/')[-1]
    datastore.Delete(session_key)

    request_path = urlparse.urlparse(upload_url)[2]
    self.environ['PATH_INFO'] = request_path
    status, _, response_body, forward_environ, forward_body = (
        self.run_dispatcher())

    self.assertEquals('404 Not Found', status)
    self.assertIn('No such upload session: %s' % session_key, response_body)
    # Test that it did not forward.
    self.assertEquals(None, forward_environ)
    self.assertEquals(None, forward_body) 
Example #15
Source File: blob_upload_test.py    From browserscope with Apache License 2.0 6 votes vote down vote up
def test_base64(self):
    """Test automatic decoding of a base-64-encoded message."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"
Content-Transfer-Encoding: base64

%s
--================1234==--""" % base64.urlsafe_b64encode('value'))

    upload_url = blobstore.create_upload_url('/success')

    upload, forward_environ, _ = self._run_test_success(
        upload_data, upload_url)

    self.assertEquals('/success', forward_environ['PATH_INFO'])
    self.assertEquals(
        ('form-data', {'filename': 'stuff.txt', 'name': 'field1'}),
        cgi.parse_header(upload['content-disposition'])) 
Example #16
Source File: blob_upload_test.py    From browserscope with Apache License 2.0 6 votes vote down vote up
def test_success_full_success_url(self):
    """Request flow with a success url containing protocol, host and port."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

value
--================1234==--""")

    # The scheme, host and port should all be ignored.
    upload_url = blobstore.create_upload_url(
        'https://example.com:1234/success?foo=bar')

    upload, forward_environ, _ = self._run_test_success(
        upload_data, upload_url)

    self.assertEquals('/success', forward_environ['PATH_INFO'])
    self.assertEquals('foo=bar', forward_environ['QUERY_STRING'])
    self.assertEquals(
        ('form-data', {'filename': 'stuff.txt', 'name': 'field1'}),
        cgi.parse_header(upload['content-disposition'])) 
Example #17
Source File: blob_upload_test.py    From browserscope with Apache License 2.0 6 votes vote down vote up
def test_success_with_bucket(self):
    """Basic dispatcher request flow."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

value
--================1234==--""")

    upload_url = blobstore.create_upload_url('/success?foo=bar',
                                             gs_bucket_name='my_test_bucket')

    upload, forward_environ, forward_body = self._run_test_success(
        upload_data, upload_url)

    self.assertEquals('/success', forward_environ['PATH_INFO'])
    self.assertEquals('foo=bar', forward_environ['QUERY_STRING'])
    self.assertEquals(
        ('form-data', {'filename': 'stuff.txt', 'name': 'field1'}),
        cgi.parse_header(upload['content-disposition']))
    self.assertIn('X-AppEngine-Cloud-Storage-Object: /gs/%s' % 'my_test_bucket',
                  forward_body) 
Example #18
Source File: blobstore.py    From locality-sensitive-hashing with MIT License 5 votes vote down vote up
def create_upload_url(url):
    updated_url = "/" + url

    return blobstore.create_upload_url(updated_url) 
Example #19
Source File: blob_upload_test.py    From browserscope with Apache License 2.0 5 votes vote down vote up
def test_content_type_too_long(self):
    """Ensure a 400 response when content-type size limit exceeded."""
    content_type = 'text/' + 'a' * 500
    # Create upload.
    upload_data = (
        """Content-Type: multipart/form-data; boundary="================1234=="

--================1234==
Content-Type: %s
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

Lots and Lots of Stuff
--================1234==--""" % content_type)

    upload_url = blobstore.create_upload_url('/success1')

    request_path = urlparse.urlparse(upload_url)[2]
    self.environ['PATH_INFO'] = request_path
    self.environ['CONTENT_TYPE'] = (
        'multipart/form-data; boundary="================1234=="')

    status, _, response_body, forward_environ, forward_body = (
        self.run_dispatcher(upload_data))

    self.assertEquals('400 Bad Request', status)
    self.assertIn('The Content-Type exceeds the maximum allowed length of 500.',
                  response_body)
    # Test that it did not forward.
    self.assertEquals(None, forward_environ)
    self.assertEquals(None, forward_body) 
Example #20
Source File: filestore.py    From MyLife with MIT License 5 votes vote down vote up
def create_upload_url(path):
	return blobstore.create_upload_url(path, gs_bucket_name=_bucket_name()) 
Example #21
Source File: blob_upload_test.py    From browserscope with Apache License 2.0 5 votes vote down vote up
def test_filename_too_long(self):
    """Ensure a 400 response is generated when filename size limit exceeded."""
    filename = 'a' * 500 + '.txt'
    # Create upload.
    upload_data = (
        """Content-Type: multipart/form-data; boundary="================1234=="

--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="%s"

Lots and Lots of Stuff
--================1234==--""" % filename)

    upload_url = blobstore.create_upload_url('/success1')

    request_path = urlparse.urlparse(upload_url)[2]
    self.environ['PATH_INFO'] = request_path
    self.environ['CONTENT_TYPE'] = (
        'multipart/form-data; boundary="================1234=="')

    status, _, response_body, forward_environ, forward_body = (
        self.run_dispatcher(upload_data))

    self.assertEquals('400 Bad Request', status)
    self.assertIn('The filename exceeds the maximum allowed length of 500.',
                  response_body)
    # Test that it did not forward.
    self.assertEquals(None, forward_environ)
    self.assertEquals(None, forward_body) 
Example #22
Source File: blob_upload_test.py    From browserscope with Apache License 2.0 5 votes vote down vote up
def test_entity_too_large(self):
    """Ensure a 413 response is generated when upload size limit exceeded."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

Lots and Lots of Stuff
--================1234==--""")

    upload_url = blobstore.create_upload_url('/success1', max_bytes_per_blob=1)

    request_path = urlparse.urlparse(upload_url)[2]
    self.environ['PATH_INFO'] = request_path
    self.environ['CONTENT_TYPE'] = (
        'multipart/form-data; boundary="================1234=="')

    status, _, _, forward_environ, forward_body = (
        self.run_dispatcher(upload_data))

    self.assertEquals('413 Request Entity Too Large', status)
    # Test that it did not forward.
    self.assertEquals(None, forward_environ)
    self.assertEquals(None, forward_body) 
Example #23
Source File: blob_upload_test.py    From browserscope with Apache License 2.0 5 votes vote down vote up
def test_copy_headers(self):
    """Tests that headers are copied, except for ones that should not be."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

value
--================1234==--""")

    upload_url = blobstore.create_upload_url('/success')

    request_path = urlparse.urlparse(upload_url)[2]
    self.environ['PATH_INFO'] = request_path
    self.environ['CONTENT_TYPE'] = (
        'multipart/form-data; boundary="================1234=="')
    self.environ['HTTP_PLEASE_COPY_ME'] = 'I get copied'
    self.environ['HTTP_CONTENT_TYPE'] = 'I should not be copied'
    self.environ['HTTP_CONTENT_LENGTH'] = 'I should not be copied'
    self.environ['HTTP_CONTENT_MD5'] = 'I should not be copied'

    status, _, response_body, forward_environ, forward_body = (
        self.run_dispatcher(upload_data))

    self.assertEquals('200 OK', status)
    self.assertEquals('Forwarded successfully.', response_body)
    self.assertIn('HTTP_PLEASE_COPY_ME', forward_environ)
    self.assertEquals('I get copied', forward_environ['HTTP_PLEASE_COPY_ME'])
    self.assertNotIn('HTTP_CONTENT_TYPE', forward_environ)
    self.assertNotIn('HTTP_CONTENT_LENGTH', forward_environ)
    self.assertNotIn('HTTP_CONTENT_MD5', forward_environ)
    # These ones should have been modified.
    self.assertIn('CONTENT_TYPE', forward_environ)
    self.assertNotEquals(
        'multipart/form-data; boundary="================1234=="',
        forward_environ['CONTENT_TYPE'])
    self.assertIn('CONTENT_LENGTH', forward_environ)
    self.assertEquals(str(len(forward_body)), forward_environ['CONTENT_LENGTH']) 
Example #24
Source File: blob_upload_test.py    From python-compat-runtime with Apache License 2.0 5 votes vote down vote up
def test_copy_headers(self):
    """Tests that headers are copied, except for ones that should not be."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

value
--================1234==--""")

    upload_url = blobstore.create_upload_url('/success')

    request_path = urlparse.urlparse(upload_url)[2]
    self.environ['PATH_INFO'] = request_path
    self.environ['CONTENT_TYPE'] = (
        'multipart/form-data; boundary="================1234=="')
    self.environ['HTTP_PLEASE_COPY_ME'] = 'I get copied'
    self.environ['HTTP_CONTENT_TYPE'] = 'I should not be copied'
    self.environ['HTTP_CONTENT_LENGTH'] = 'I should not be copied'
    self.environ['HTTP_CONTENT_MD5'] = 'I should not be copied'

    status, _, response_body, forward_environ, forward_body = (
        self.run_dispatcher(upload_data))

    self.assertEquals('200 OK', status)
    self.assertEquals('Forwarded successfully.', response_body)
    self.assertIn('HTTP_PLEASE_COPY_ME', forward_environ)
    self.assertEquals('I get copied', forward_environ['HTTP_PLEASE_COPY_ME'])
    self.assertNotIn('HTTP_CONTENT_TYPE', forward_environ)
    self.assertNotIn('HTTP_CONTENT_LENGTH', forward_environ)
    self.assertNotIn('HTTP_CONTENT_MD5', forward_environ)
    # These ones should have been modified.
    self.assertIn('CONTENT_TYPE', forward_environ)
    self.assertNotEquals(
        'multipart/form-data; boundary="================1234=="',
        forward_environ['CONTENT_TYPE'])
    self.assertIn('CONTENT_LENGTH', forward_environ)
    self.assertEquals(str(len(forward_body)), forward_environ['CONTENT_LENGTH']) 
Example #25
Source File: blob_upload_test.py    From python-compat-runtime with Apache License 2.0 5 votes vote down vote up
def test_entity_too_large(self):
    """Ensure a 413 response is generated when upload size limit exceeded."""
    # Create upload.
    upload_data = (
        """--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

Lots and Lots of Stuff
--================1234==--""")

    upload_url = blobstore.create_upload_url('/success1', max_bytes_per_blob=1)

    request_path = urlparse.urlparse(upload_url)[2]
    self.environ['PATH_INFO'] = request_path
    self.environ['CONTENT_TYPE'] = (
        'multipart/form-data; boundary="================1234=="')

    status, _, _, forward_environ, forward_body = (
        self.run_dispatcher(upload_data))

    self.assertEquals('413 Request Entity Too Large', status)
    # Test that it did not forward.
    self.assertEquals(None, forward_environ)
    self.assertEquals(None, forward_body) 
Example #26
Source File: blob_upload_test.py    From python-compat-runtime with Apache License 2.0 5 votes vote down vote up
def test_filename_too_long(self):
    """Ensure a 400 response is generated when filename size limit exceeded."""
    filename = 'a' * 500 + '.txt'
    # Create upload.
    upload_data = (
        """Content-Type: multipart/form-data; boundary="================1234=="

--================1234==
Content-Type: text/plain
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="%s"

Lots and Lots of Stuff
--================1234==--""" % filename)

    upload_url = blobstore.create_upload_url('/success1')

    request_path = urlparse.urlparse(upload_url)[2]
    self.environ['PATH_INFO'] = request_path
    self.environ['CONTENT_TYPE'] = (
        'multipart/form-data; boundary="================1234=="')

    status, _, response_body, forward_environ, forward_body = (
        self.run_dispatcher(upload_data))

    self.assertEquals('400 Bad Request', status)
    self.assertIn('The filename exceeds the maximum allowed length of 500.',
                  response_body)
    # Test that it did not forward.
    self.assertEquals(None, forward_environ)
    self.assertEquals(None, forward_body) 
Example #27
Source File: blob_upload_test.py    From python-compat-runtime with Apache License 2.0 5 votes vote down vote up
def test_content_type_too_long(self):
    """Ensure a 400 response when content-type size limit exceeded."""
    content_type = 'text/' + 'a' * 500
    # Create upload.
    upload_data = (
        """Content-Type: multipart/form-data; boundary="================1234=="

--================1234==
Content-Type: %s
MIME-Version: 1.0
Content-Disposition: form-data; name="field1"; filename="stuff.txt"

Lots and Lots of Stuff
--================1234==--""" % content_type)

    upload_url = blobstore.create_upload_url('/success1')

    request_path = urlparse.urlparse(upload_url)[2]
    self.environ['PATH_INFO'] = request_path
    self.environ['CONTENT_TYPE'] = (
        'multipart/form-data; boundary="================1234=="')

    status, _, response_body, forward_environ, forward_body = (
        self.run_dispatcher(upload_data))

    self.assertEquals('400 Bad Request', status)
    self.assertIn('The Content-Type exceeds the maximum allowed length of 500.',
                  response_body)
    # Test that it did not forward.
    self.assertEquals(None, forward_environ)
    self.assertEquals(None, forward_body)