1- # files/views.py
2-
3- from django .shortcuts import render , redirect , get_object_or_404
4- from django .http import HttpResponse
51from django .contrib .auth .decorators import login_required
2+ from django .http import HttpResponse , FileResponse
3+ from django .shortcuts import render , redirect , get_object_or_404
4+ from django .contrib .auth .hashers import make_password
65from .models import UploadedFile
76from .forms import FileUploadForm
87from storages .backends .s3boto3 import S3Boto3Storage
@@ -27,46 +26,57 @@ def upload_file(request):
2726 return render (request , 'files/upload_file.html' , {'form' : form })
2827
2928@login_required
30- def download_file (request , file_id ):
31- file = get_object_or_404 (UploadedFile , id = file_id )
32- response = HttpResponse (file .file , content_type = 'application/force-download' )
33- response ['Content-Disposition' ] = f'attachment; filename={ file .file .name } '
29+ def download_file (request , unique_token ):
30+ file_instance = get_object_or_404 (UploadedFile , unique_token = unique_token )
31+ response = HttpResponse (file_instance .file , content_type = 'application/force-download' )
32+ response ['Content-Disposition' ] = f'attachment; filename={ file_instance .file .name } '
3433 return response
3534
35+ # views.py
3636
3737@login_required
38- def delete_file (request , file_id ):
39- file_instance = get_object_or_404 (UploadedFile , id = file_id )
38+ def delete_file (request , unique_token ):
39+ # Try to find the file by unique_token
40+ file_instance = get_object_or_404 (UploadedFile , unique_token = unique_token )
41+
42+ # If file_instance is not found, try to find by hashed_file_id
43+ if not file_instance :
44+ hashed_file_id = unique_token
45+ try :
46+ file_instance = UploadedFile .objects .get (hashed_file_id = hashed_file_id )
47+ except UploadedFile .DoesNotExist :
48+ return HttpResponse ("File not found." , status = 404 )
49+
4050 storage = S3Boto3Storage ()
4151 file_path = file_instance .file .name
4252
4353 if storage .exists (file_path ):
4454 storage .delete (file_path )
55+
4556 file_instance .delete ()
46-
47-
57+
4858 files = UploadedFile .objects .filter (user = request .user )
4959 return redirect ('files:file_list' )
5060
51- from django . http import FileResponse
61+
5262
5363@login_required
54- def view_file (request , file_id ):
55- file_instance = get_object_or_404 (UploadedFile , id = file_id )
64+ def view_file (request , unique_token ):
65+ file_instance = get_object_or_404 (UploadedFile , unique_token = unique_token )
5666 file_path = file_instance .file .name
5767 file_extension = file_path .split ('.' )[- 1 ].lower ()
68+
5869 if file_extension in ['jpg' , 'jpeg' , 'png' , 'gif' ]:
5970 return FileResponse (file_instance .file , content_type = 'image/' + file_extension )
6071 elif file_extension == 'pdf' :
6172 response = FileResponse (file_instance .file , content_type = 'application/pdf' )
6273 response ['Content-Disposition' ] = f'inline; filename={ file_instance .file .name } '
6374 return response
6475 else :
65- return redirect ('files:download_file' , file_id = file_id )
66-
76+ return redirect ('files:download_file' , file_id = file_instance .id )
6777
68- def share_file (request , file_id ):
69- file_instance = get_object_or_404 (UploadedFile , id = file_id )
78+ def share_file (request , unique_token ):
79+ file_instance = get_object_or_404 (UploadedFile , unique_token = unique_token )
7080 file_path = file_instance .file .name
7181 file_extension = file_path .split ('.' )[- 1 ].lower ()
7282 if file_extension in ['jpg' , 'jpeg' , 'png' , 'gif' ]:
@@ -76,4 +86,4 @@ def share_file(request, file_id):
7686 response ['Content-Disposition' ] = f'inline; filename={ file_instance .file .name } '
7787 return response
7888 else :
79- return redirect ('files:download_file' , file_id = file_id )
89+ return redirect ('files:download_file' , unique_token = unique_token )
0 commit comments