]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
file_upload demo: write multi-part framing in one call 2149/head
authorPierce Lopez <pierce.lopez@gmail.com>
Tue, 12 Sep 2017 20:57:50 +0000 (16:57 -0400)
committerPierce Lopez <pierce.lopez@gmail.com>
Tue, 12 Sep 2017 20:57:50 +0000 (16:57 -0400)
demos/file_upload/file_uploader.py

index f4af78c5f073b49411adca5bd9221b9a75d4405f..9678969417a358624323c323c7dedd1fcedda9e9 100644 (file)
@@ -34,13 +34,15 @@ def multipart_producer(boundary, filenames, write):
 
     for filename in filenames:
         filename_bytes = filename.encode()
-        yield write(b'--%s\r\n' % (boundary_bytes,))
-        yield write(b'Content-Disposition: form-data; name="%s"; filename="%s"\r\n' %
-                    (filename_bytes, filename_bytes))
-
         mtype = mimetypes.guess_type(filename)[0] or 'application/octet-stream'
-        yield write(b'Content-Type: %s\r\n' % (mtype.encode(),))
-        yield write(b'\r\n')
+        buf = (
+            (b'--%s\r\n' % boundary_bytes) +
+            (b'Content-Disposition: form-data; name="%s"; filename="%s"\r\n' %
+             (filename_bytes, filename_bytes)) +
+            (b'Content-Type: %s\r\n' % mtype.encode()) +
+            b'\r\n'
+        )
+        yield write(buf)
         with open(filename, 'rb') as f:
             while True:
                 # 16k at a time.
@@ -95,7 +97,6 @@ def put(filenames):
                                       method='PUT',
                                       headers=headers,
                                       body_producer=producer)
-    
         print(response)