Fix common.send_file to use pathclass.
This commit is contained in:
parent
0de755f138
commit
ea7401b4f2
1 changed files with 9 additions and 11 deletions
|
@ -95,19 +95,16 @@ def send_file(filepath, override_mimetype=None):
|
||||||
'''
|
'''
|
||||||
Range-enabled file sending.
|
Range-enabled file sending.
|
||||||
'''
|
'''
|
||||||
if isinstance(filepath, pathclass.Path):
|
filepath = pathclass.Path(filepath)
|
||||||
filepath = filepath.absolute_path
|
|
||||||
|
|
||||||
try:
|
if not filepath.is_file:
|
||||||
file_size = os.path.getsize(filepath)
|
|
||||||
except FileNotFoundError:
|
|
||||||
flask.abort(404)
|
flask.abort(404)
|
||||||
|
|
||||||
outgoing_headers = {}
|
outgoing_headers = {}
|
||||||
if override_mimetype is not None:
|
if override_mimetype is not None:
|
||||||
mimetype = override_mimetype
|
mimetype = override_mimetype
|
||||||
else:
|
else:
|
||||||
mimetype = mimetypes.guess_type(filepath)[0]
|
mimetype = mimetypes.guess_type(filepath.absolute_path)[0]
|
||||||
|
|
||||||
if mimetype is not None:
|
if mimetype is not None:
|
||||||
if 'text/' in mimetype:
|
if 'text/' in mimetype:
|
||||||
|
@ -125,25 +122,26 @@ def send_file(filepath, override_mimetype=None):
|
||||||
range_max = int_helper(desired_max)
|
range_max = int_helper(desired_max)
|
||||||
else:
|
else:
|
||||||
range_min = int_helper(desired_range)
|
range_min = int_helper(desired_range)
|
||||||
|
range_max = None
|
||||||
|
|
||||||
if range_min is None:
|
if range_min is None:
|
||||||
range_min = 0
|
range_min = 0
|
||||||
if range_max is None:
|
if range_max is None:
|
||||||
range_max = file_size
|
range_max = filepath.size
|
||||||
|
|
||||||
# because ranges are 0-indexed
|
# because ranges are 0-indexed
|
||||||
range_max = min(range_max, file_size - 1)
|
range_max = min(range_max, filepath.size - 1)
|
||||||
range_min = max(range_min, 0)
|
range_min = max(range_min, 0)
|
||||||
|
|
||||||
range_header = 'bytes {min}-{max}/{outof}'.format(
|
range_header = 'bytes {min}-{max}/{outof}'.format(
|
||||||
min=range_min,
|
min=range_min,
|
||||||
max=range_max,
|
max=range_max,
|
||||||
outof=file_size,
|
outof=filepath.size,
|
||||||
)
|
)
|
||||||
outgoing_headers['Content-Range'] = range_header
|
outgoing_headers['Content-Range'] = range_header
|
||||||
status = 206
|
status = 206
|
||||||
else:
|
else:
|
||||||
range_max = file_size - 1
|
range_max = filepath.size - 1
|
||||||
range_min = 0
|
range_min = 0
|
||||||
status = 200
|
status = 200
|
||||||
|
|
||||||
|
@ -154,7 +152,7 @@ def send_file(filepath, override_mimetype=None):
|
||||||
outgoing_data = bytes()
|
outgoing_data = bytes()
|
||||||
else:
|
else:
|
||||||
outgoing_data = etiquette.helpers.read_filebytes(
|
outgoing_data = etiquette.helpers.read_filebytes(
|
||||||
filepath,
|
filepath.absolute_path,
|
||||||
range_min=range_min,
|
range_min=range_min,
|
||||||
range_max=range_max,
|
range_max=range_max,
|
||||||
chunk_size=P.config['file_read_chunk'],
|
chunk_size=P.config['file_read_chunk'],
|
||||||
|
|
Loading…
Reference in a new issue