import logging
from django.http import HttpResponse, FileResponse
from io import BytesIO
from urllib.parse import quote
class FileDownload(APIView):
def get(self, request, *args, **kwargs):
try:
id = request.query_params.get('id')
my_dip = DiplomaMyInfo.objects.filter(id=id).first()
file_path = my_dip.diploma_path
filename = os.path.basename(file_path)
# file_path 图片路径
with open(file_path, 'rb') as file:
file_data = BytesIO(file.read())
response = FileResponse(file_data)
encoded_filename = quote(filename)
response['Content-Disposition'] = f'attachment; filename="{encoded_filename}"'
return response
except Exception as e:
logging.error(str(e))
if 'No such file or directory' in str(e):
return JsonResponse(msg='找不到该文件')
return JsonResponse(msg=str(e))
urlpatterns = [
path('api/v1/filedownload/', views.user.FileDownload.as_view(), name='filedownload'),
]
直接访问路由即可下载
127.0.0.1:8000/api/v1/filedownload/?id=6