Commit 34778ed818ed3fea1ebc4d8f80e82e19fd4beb74

Authored by Miguel Barao
1 parent 3586cfab
Exists in master and in 1 other branch dev

FileHandler now serves the complete file instead of chunks.

Showing 1 changed file with 17 additions and 12 deletions   Show diff stats
@@ -182,7 +182,9 @@ class TopicHandler(BaseHandler): @@ -182,7 +182,9 @@ class TopicHandler(BaseHandler):
182 # Based on https://bhch.github.io/posts/2017/12/serving-large-files-with-tornado-safely-without-blocking/ 182 # Based on https://bhch.github.io/posts/2017/12/serving-large-files-with-tornado-safely-without-blocking/
183 # ---------------------------------------------------------------------------- 183 # ----------------------------------------------------------------------------
184 class FileHandler(BaseHandler): 184 class FileHandler(BaseHandler):
185 - chunk_size = 4 * 1024 * 1024 # serve up to 4 MiB multiple times 185 + SUPPORTED_METHODS = ['GET']
  186 +
  187 + # chunk_size = 4 * 1024 * 1024 # serve up to 4 MiB multiple times
186 188
187 @tornado.web.authenticated 189 @tornado.web.authenticated
188 async def get(self, filename): 190 async def get(self, filename):
@@ -203,17 +205,20 @@ class FileHandler(BaseHandler): @@ -203,17 +205,20 @@ class FileHandler(BaseHandler):
203 # divide the file into chunks and write one chunk at a time, so 205 # divide the file into chunks and write one chunk at a time, so
204 # that the write does not block the ioloop for very long. 206 # that the write does not block the ioloop for very long.
205 with f: 207 with f:
206 - chunk = f.read(self.chunk_size)  
207 - while chunk:  
208 - try:  
209 - self.write(chunk) # write the chunk to response  
210 - await self.flush() # flush the current chunk to socket  
211 - except iostream.StreamClosedError:  
212 - break # client closed the connection  
213 - finally:  
214 - del chunk  
215 - await asyncio.sleep(0) # 1 nanosecond (hack)  
216 - chunk = f.read(self.chunk_size) 208 + self.write(f.read())
  209 + await self.flush()
  210 +
  211 + # chunk = f.read(self.chunk_size)
  212 + # while chunk:
  213 + # try:
  214 + # self.write(chunk) # write the chunk to response
  215 + # await self.flush() # flush the current chunk to socket
  216 + # except iostream.StreamClosedError:
  217 + # break # client closed the connection
  218 + # finally:
  219 + # del chunk
  220 + # await asyncio.sleep(0) # 1 nanosecond (hack)
  221 + # chunk = f.read(self.chunk_size)
217 222
218 223
219 # ---------------------------------------------------------------------------- 224 # ----------------------------------------------------------------------------