Skip to content

Commit f3f48d0

Browse files
fix exercise image expires
1 parent 3d3d98f commit f3f48d0

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

classroom/business/teacher/classroom.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import secrets
21
import os
2+
import secrets
33

44
from django.contrib.auth import get_user_model
5-
from django.core.files.storage import default_storage
65

6+
from classroom.storages import ExerciseImageStorage
77
from classroom.tasks import send_temp_password_for_new_students_task
88

99
User = get_user_model()
@@ -75,14 +75,16 @@ def resend_password_emails(classroom, email):
7575

7676

7777
def upload_reading_exercise_image(image):
78+
storage = ExerciseImageStorage()
79+
7880
directory = 'classroom/reading_exercises/uploaded_images'
7981
path = f'{directory}/{image.name}'
8082

81-
if default_storage.exists(path):
83+
if storage.exists(path):
8284
img_name, img_ext = os.path.splitext(image.name)
8385
unique_name = img_name + secrets.token_urlsafe(nbytes=8)
8486
path = f'{directory}/{unique_name}{img_ext}'
8587

86-
default_storage.save(path, image)
87-
url = default_storage.url(path)
88+
storage.save(path, image)
89+
url = storage.url(path)
8890
return url

classroom/storages.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from storages.backends.s3boto3 import S3StaticStorage
2+
3+
4+
class ExerciseImageStorage(S3StaticStorage):
5+
"""
6+
Because image URL is saved in html by CKEditor, we must use S3StaticStorage
7+
so that `querystring_auth` is disabled, and URL is always the same.
8+
Also, set `default_acl` to 'public-read' so that these images are accessible.
9+
"""
10+
default_acl = 'public-read'

0 commit comments

Comments
 (0)