def download_folder_as_zip(self): self.set_header('Content-Type', 'application/zip') self.set_header( 'Content-Disposition', utils.make_disposition((self.path.name or 'download') + '.zip')) result = yield from self.provider.zip(self.path) yield self.write_stream(result)
async def download_file(self): if 'Range' not in self.request.headers: request_range = None else: logger.debug('Range header is: {}'.format( self.request.headers['Range'])) request_range = utils.parse_request_range( self.request.headers['Range']) logger.debug('Range header parsed as: {}'.format(request_range)) version = self.get_query_argument( 'version', default=None) or self.get_query_argument('revision', default=None) stream = await self.provider.download( self.path, revision=version, range=request_range, accept_url='direct' not in self.request.query_arguments, mode=self.get_query_argument('mode', default=None), ) if isinstance(stream, str): return self.redirect(stream) if getattr(stream, 'partial', None): # Use getattr here as not all stream may have a partial attribute # Plus it fixes tests self.set_status(206) self.set_header('Content-Range', stream.content_range) if stream.content_type is not None: self.set_header('Content-Type', stream.content_type) logger.debug('stream size is: {}'.format(stream.size)) if stream.size is not None: self.set_header('Content-Length', str(stream.size)) # Build `Content-Disposition` header from `displayName` override, # headers of provider response, or file path, whichever is truthy first name = self.get_query_argument('displayName', default=None) or getattr( stream, 'name', None) or self.path.name self.set_header('Content-Disposition', utils.make_disposition(name)) _, ext = os.path.splitext(name) # If the file extention is in mime_types # override the content type to fix issues with safari shoving in new file extensions if ext in mime_types: self.set_header('Content-Type', mime_types[ext]) await self.write_stream(stream) if getattr(stream, 'partial', False) and isinstance( stream, ResponseStreamReader): await stream.response.release() logger.debug('bytes received is: {}'.format(self.bytes_downloaded))
def get(self): """Download as a Zip archive.""" self.set_header('Content-Type', 'application/zip') self.set_header('Content-Disposition', utils.make_disposition('download.zip')) result = yield from self.provider.zip(**self.arguments) yield self.write_stream(result)
def download_folder_as_zip(self): self.set_header('Content-Type', 'application/zip') self.set_header( 'Content-Disposition', utils.make_disposition((self.path.name or 'download') + '.zip') ) result = yield from self.provider.zip(self.path) yield self.write_stream(result)
async def download_folder_as_zip(self): zipfile_name = self.path.name or '{}-archive'.format( self.provider.NAME) self.set_header('Content-Type', 'application/zip') self.set_header('Content-Disposition', utils.make_disposition(zipfile_name + '.zip')) result = await self.provider.zip(self.path) await self.write_stream(result)
async def download_folder_as_zip(self): zipfile_name = self.path.name or '{}-archive'.format(self.provider.NAME) self.set_header('Content-Type', 'application/zip') self.set_header( 'Content-Disposition', utils.make_disposition(zipfile_name + '.zip') ) result = await self.provider.zip(self.path) await self.write_stream(result)
def get(self): """Download as a Zip archive.""" self.set_header('Content-Type', 'application/zip') self.set_header( 'Content-Disposition', utils.make_disposition('download.zip') ) result = yield from self.provider.zip(**self.arguments) yield self.write_stream(result)
async def get(self): """Download as a Zip archive.""" zipfile_name = self.path.name or '{}-archive'.format(self.provider.NAME) self.set_header('Content-Type', 'application/zip') self.set_header( 'Content-Disposition', utils.make_disposition(zipfile_name + '.zip') ) result = await self.provider.zip(**self.arguments) await self.write_stream(result)
async def get(self): """Download as a Zip archive.""" zipfile_name = self.path.name or '{}-archive'.format( self.provider.NAME) self.set_header('Content-Type', 'application/zip') self.set_header('Content-Disposition', utils.make_disposition(zipfile_name + '.zip')) result = await self.provider.zip(**self.arguments) await self.write_stream(result) self._send_hook('download_zip', path=self.path)
def get(self): """Download a file.""" try: self.arguments['accept_url'] = TRUTH_MAP[self.arguments.get('accept_url', 'true').lower()] except KeyError: raise web.HTTPError(status_code=400) result = yield from self.provider.download(**self.arguments) if isinstance(result, str): return self.redirect(result) if hasattr(result, 'content_type'): self.set_header('Content-Type', result.content_type) if hasattr(result, 'size') and result.size is not None: self.set_header('Content-Length', str(result.size)) # Build `Content-Disposition` header from `displayName` override, # headers of provider response, or file path, whichever is truthy first if self.arguments.get('displayName'): disposition = utils.make_disposition(self.arguments['displayName']) else: # If the file extention is in mime_types # override the content type to fix issues with safari shoving in new file extensions if self.arguments['path'].ext in mime_types: self.set_header('Content-Type', mime_types[self.arguments['path'].ext]) disposition = utils.make_disposition(self.arguments['path'].name) self.set_header('Content-Disposition', disposition) while True: chunk = yield from result.read(settings.CHUNK_SIZE) if not chunk: break self.write(chunk) yield from utils.future_wrapper(self.flush())
def get(self): """Download a file.""" try: self.arguments['accept_url'] = TRUTH_MAP[self.arguments.get('accept_url', 'true').lower()] except KeyError: raise web.HTTPError(status_code=400) result = yield from self.provider.download(**self.arguments) if isinstance(result, str): return self.redirect(result) try: headers = result.response.headers except AttributeError: headers = {} self.set_header('Content-Type', result.content_type) if result.size: self.set_header('Content-Length', str(result.size)) # Build `Content-Disposition` header from `displayName` override, # headers of provider response, or file path, whichever is truthy first if self.arguments.get('displayName'): disposition = utils.make_disposition(self.arguments['displayName']) elif headers.get('content-disposition'): disposition = headers['content-disposition'] else: disposition = utils.make_disposition(os.path.split(self.arguments['path'])[-1]) self.set_header('Content-Disposition', disposition) while True: chunk = yield from result.read(settings.CHUNK_SIZE) if not chunk: break self.write(chunk) yield from utils.future_wrapper(self.flush())
def get(self): """Download as a Zip archive.""" self.set_header('Content-Type', 'application/zip') self.set_header('Content-Disposition', utils.make_disposition('download.zip')) result = yield from self.provider.zip(**self.arguments) while True: chunk = yield from result.read(settings.CHUNK_SIZE) if not chunk: break self.write(chunk) yield from utils.future_wrapper(self.flush())
async def get(self): """Download a file.""" try: self.arguments['accept_url'] = TRUTH_MAP[self.arguments.get( 'accept_url', 'true').lower()] except KeyError: raise tornado.web.HTTPError(status_code=400) if 'Range' in self.request.headers: request_range = utils.parse_request_range( self.request.headers['Range']) else: request_range = None result = await self.provider.download(range=request_range, **self.arguments) if isinstance(result, str): self.redirect(result) self._send_hook('download_file', path=self.path) return if getattr(result, 'partial', None): # Use getattr here as not all stream may have a partial attribute # Plus it fixes tests self.set_status(206) self.set_header('Content-Range', result.content_range) if result.content_type is not None: self.set_header('Content-Type', result.content_type) if result.size is not None: self.set_header('Content-Length', str(result.size)) # Build `Content-Disposition` header from `displayName` override, # headers of provider response, or file path, whichever is truthy first name = self.arguments.get('displayName') or getattr( result, 'name', None) or self.path.name self.set_header('Content-Disposition', utils.make_disposition(name)) _, ext = os.path.splitext(name) # If the file extention is in mime_types # override the content type to fix issues with safari shoving in new file extensions if ext in mime_types: self.set_header('Content-Type', mime_types[ext]) await self.write_stream(result) self._send_hook('download_file', path=self.path)
def get(self): """Download as a Zip archive.""" self.set_header('Content-Type', 'application/zip') self.set_header( 'Content-Disposition', utils.make_disposition('download.zip') ) result = yield from self.provider.zip(**self.arguments) while True: chunk = yield from result.read(settings.CHUNK_SIZE) if not chunk: break self.write(chunk) yield from utils.future_wrapper(self.flush())
def download_file(self): if 'Range' not in self.request.headers: request_range = None else: request_range = tornado.httputil._parse_request_range( self.request.headers['Range']) version = self.get_query_argument( 'version', default=None) or self.get_query_argument('revision', default=None) stream = yield from self.provider.download( self.path, revision=version, range=request_range, accept_url='direct' not in self.request.query_arguments, mode=self.get_query_argument('mode', default=None), ) if isinstance(stream, str): return self.redirect(stream) if getattr(stream, 'partial', None): # Use getattr here as not all stream may have a partial attribute # Plus it fixes tests self.set_status(206) self.set_header('Content-Range', stream.content_range) if stream.content_type is not None: self.set_header('Content-Type', stream.content_type) if stream.size is not None: self.set_header('Content-Length', str(stream.size)) # Build `Content-Disposition` header from `displayName` override, # headers of provider response, or file path, whichever is truthy first name = self.get_query_argument('displayName', default=None) or getattr( stream, 'name', None) or self.path.name self.set_header('Content-Disposition', utils.make_disposition(name)) _, ext = os.path.splitext(name) # If the file extention is in mime_types # override the content type to fix issues with safari shoving in new file extensions if ext in mime_types: self.set_header('Content-Type', mime_types[ext]) yield self.write_stream(stream)
async def download_file(self): if 'Range' not in self.request.headers: request_range = None else: request_range = tornado.httputil._parse_request_range(self.request.headers['Range']) version = self.get_query_argument('version', default=None) or self.get_query_argument('revision', default=None) stream = await self.provider.download( self.path, revision=version, range=request_range, accept_url='direct' not in self.request.query_arguments, mode=self.get_query_argument('mode', default=None), ) if isinstance(stream, str): return self.redirect(stream) if getattr(stream, 'partial', None): # Use getattr here as not all stream may have a partial attribute # Plus it fixes tests self.set_status(206) self.set_header('Content-Range', stream.content_range) if stream.content_type is not None: self.set_header('Content-Type', stream.content_type) if stream.size is not None: self.set_header('Content-Length', str(stream.size)) # Build `Content-Disposition` header from `displayName` override, # headers of provider response, or file path, whichever is truthy first name = self.get_query_argument('displayName', default=None) or getattr(stream, 'name', None) or self.path.name self.set_header('Content-Disposition', utils.make_disposition(name)) _, ext = os.path.splitext(name) # If the file extention is in mime_types # override the content type to fix issues with safari shoving in new file extensions if ext in mime_types: self.set_header('Content-Type', mime_types[ext]) await self.write_stream(stream)
async def get(self): """Download a file.""" try: self.arguments['accept_url'] = TRUTH_MAP[self.arguments.get('accept_url', 'true').lower()] except KeyError: raise tornado.web.HTTPError(status_code=400) if 'Range' in self.request.headers: request_range = tornado.httputil._parse_request_range(self.request.headers['Range']) else: request_range = None result = await self.provider.download(range=request_range, **self.arguments) if isinstance(result, str): return self.redirect(result) if getattr(result, 'partial', None): # Use getattr here as not all stream may have a partial attribute # Plus it fixes tests self.set_status(206) self.set_header('Content-Range', result.content_range) if result.content_type is not None: self.set_header('Content-Type', result.content_type) if result.size is not None: self.set_header('Content-Length', str(result.size)) # Build `Content-Disposition` header from `displayName` override, # headers of provider response, or file path, whichever is truthy first name = self.arguments.get('displayName') or getattr(result, 'name', None) or self.path.name self.set_header('Content-Disposition', utils.make_disposition(name)) _, ext = os.path.splitext(name) # If the file extention is in mime_types # override the content type to fix issues with safari shoving in new file extensions if ext in mime_types: self.set_header('Content-Type', mime_types[ext]) await self.write_stream(result)