File tree Expand file tree Collapse file tree 2 files changed +17
-5
lines changed Expand file tree Collapse file tree 2 files changed +17
-5
lines changed Original file line number Diff line number Diff line change 1
- import secrets
2
1
import os
2
+ import secrets
3
3
4
4
from django .contrib .auth import get_user_model
5
- from django .core .files .storage import default_storage
6
5
6
+ from classroom .storages import ExerciseImageStorage
7
7
from classroom .tasks import send_temp_password_for_new_students_task
8
8
9
9
User = get_user_model ()
@@ -75,14 +75,16 @@ def resend_password_emails(classroom, email):
75
75
76
76
77
77
def upload_reading_exercise_image (image ):
78
+ storage = ExerciseImageStorage ()
79
+
78
80
directory = 'classroom/reading_exercises/uploaded_images'
79
81
path = f'{ directory } /{ image .name } '
80
82
81
- if default_storage .exists (path ):
83
+ if storage .exists (path ):
82
84
img_name , img_ext = os .path .splitext (image .name )
83
85
unique_name = img_name + secrets .token_urlsafe (nbytes = 8 )
84
86
path = f'{ directory } /{ unique_name } { img_ext } '
85
87
86
- default_storage .save (path , image )
87
- url = default_storage .url (path )
88
+ storage .save (path , image )
89
+ url = storage .url (path )
88
90
return url
Original file line number Diff line number Diff line change
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'
You can’t perform that action at this time.
0 commit comments