Refactor: serve content file func
This commit is contained in:
parent
5b212b3f0d
commit
b6b8b5918c
1 changed files with 36 additions and 48 deletions
|
@ -9,16 +9,33 @@ from sorl.thumbnail import get_thumbnail
|
||||||
from .models import PostFileModel
|
from .models import PostFileModel
|
||||||
|
|
||||||
|
|
||||||
|
THUMBNAIL_SIZES = {
|
||||||
|
"sx": (64, ".thumb_64.jpg"),
|
||||||
|
"sm": (256, ".thumb_256.jpg"),
|
||||||
|
"md": (748, ".thumb_748.jpg"),
|
||||||
|
"lg": (1024, ".thumb_1024.jpg"),
|
||||||
|
"xl": (2048, ".thumb_2048.jpg"),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def get_thumbnail_file(source_path, size_key):
|
||||||
|
"""Generates and retrieves the thumbnail file."""
|
||||||
|
size, suffix = THUMBNAIL_SIZES.get(size_key, (None, ""))
|
||||||
|
if size:
|
||||||
|
thumbnail_file = get_thumbnail(source_path, str(size), upscale=False)
|
||||||
|
return os.path.abspath(
|
||||||
|
os.path.join(settings.MEDIA_ROOT, thumbnail_file.name)
|
||||||
|
), suffix
|
||||||
|
return None, ""
|
||||||
|
|
||||||
|
|
||||||
def serve_content_file(request, file_hash):
|
def serve_content_file(request, file_hash):
|
||||||
"""
|
"""
|
||||||
View function to serve content files for download or inline viewing
|
View function to serve content files for download or inline viewing.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
print(f"Requesting file: {file_hash}")
|
download = request.GET.get("d") == "0"
|
||||||
|
thumbnail_key = request.GET.get("t")
|
||||||
download = request.GET.get("d")
|
|
||||||
|
|
||||||
thumbnail = request.GET.get("t")
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
obj_file = get_object_or_404(PostFileModel, hash_blake3=file_hash)
|
obj_file = get_object_or_404(PostFileModel, hash_blake3=file_hash)
|
||||||
|
@ -26,53 +43,24 @@ def serve_content_file(request, file_hash):
|
||||||
file_type = obj_file.file_type
|
file_type = obj_file.file_type
|
||||||
source_file = obj_file.file
|
source_file = obj_file.file
|
||||||
|
|
||||||
if thumbnail:
|
# Use thumbnail if requested and file type is image
|
||||||
if file_type != "image":
|
if thumbnail_key and file_type != "image":
|
||||||
source_file = obj_file.thumbnail
|
source_file = obj_file.thumbnail
|
||||||
|
|
||||||
if thumbnail == "sx":
|
# Retrieve the requested thumbnail file if applicable
|
||||||
file_name += ".thumb_64.jpg"
|
if thumbnail_key in THUMBNAIL_SIZES:
|
||||||
thumbnail_file = get_thumbnail(source_file.path, "64", upscale=False)
|
thumbnail_path, suffix = get_thumbnail_file(source_file.path, thumbnail_key)
|
||||||
file = open(
|
if thumbnail_path:
|
||||||
os.path.abspath(os.path.join(settings.MEDIA_ROOT, thumbnail_file.name)),
|
file_name += suffix
|
||||||
"rb",
|
file = open(thumbnail_path, "rb")
|
||||||
)
|
else:
|
||||||
elif thumbnail == "sm":
|
file = source_file.file
|
||||||
file_name += ".thumb_256.jpg"
|
|
||||||
thumbnail_file = get_thumbnail(source_file.path, "256", upscale=False)
|
|
||||||
file = open(
|
|
||||||
os.path.abspath(os.path.join(settings.MEDIA_ROOT, thumbnail_file.name)),
|
|
||||||
"rb",
|
|
||||||
)
|
|
||||||
elif thumbnail == "md":
|
|
||||||
file_name += ".thumb_748.jpg"
|
|
||||||
thumbnail_file = get_thumbnail(source_file.path, "748", upscale=False)
|
|
||||||
file = open(
|
|
||||||
os.path.abspath(os.path.join(settings.MEDIA_ROOT, thumbnail_file.name)),
|
|
||||||
"rb",
|
|
||||||
)
|
|
||||||
elif thumbnail == "lg":
|
|
||||||
file_name += ".thumb_1024.jpg"
|
|
||||||
thumbnail_file = get_thumbnail(source_file.path, "1024", upscale=False)
|
|
||||||
file = open(
|
|
||||||
os.path.abspath(os.path.join(settings.MEDIA_ROOT, thumbnail_file.name)),
|
|
||||||
"rb",
|
|
||||||
)
|
|
||||||
elif thumbnail == "xl":
|
|
||||||
file_name += ".thumb_2048.jpg"
|
|
||||||
thumbnail_file = get_thumbnail(source_file.path, "2048", upscale=False)
|
|
||||||
file = open(
|
|
||||||
os.path.abspath(os.path.join(settings.MEDIA_ROOT, thumbnail_file.name)),
|
|
||||||
"rb",
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
file = source_file.file
|
file = source_file.file
|
||||||
|
|
||||||
response = FileResponse(file)
|
response = FileResponse(file)
|
||||||
if download == "1":
|
disposition_type = "attachment" if download else "inline"
|
||||||
response["Content-Disposition"] = f'attachment; filename="{file_name}"'
|
response["Content-Disposition"] = f'{disposition_type}; filename="{file_name}"'
|
||||||
else:
|
|
||||||
response["Content-Disposition"] = f'inline; filename="{file_name}"'
|
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue