views.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from django.shortcuts import render, redirect
  2. from django.contrib.auth.decorators import login_required
  3. from file.models import File
  4. from django.http import FileResponse, JsonResponse, HttpResponse
  5. from django.utils import timezone
  6. from judgement_function import judge_filepath, format_size
  7. from django.utils.http import urlquote
  8. from django.contrib.auth.models import User
  9. import json
  10. import os
  11. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  12. DEBUG = 1
  13. # Create your views here.
  14. #
  15. @login_required
  16. def upload_file(request):
  17. if request.method == "POST":
  18. file_obj = request.FILES.get('file')
  19. file_type = judge_filepath(file_obj.name.split('.')[-1].lower())
  20. file_folder = request.POST.get('file_path')
  21. update_time = timezone.now().strftime("%Y-%m-%d %H:%M:%S")
  22. file_size = format_size(file_obj.size)
  23. file_name = file_obj.name
  24. save_path = BASE_DIR + '/' + file_folder
  25. file_path = file_folder + '/' + file_name
  26. File.objects.create(file_id=request.File.file_id,
  27. file_name=file_name,
  28. folder=file_folder,
  29. file_path=file_path,
  30. update_time=update_time,
  31. file_size=file_size,
  32. file_type=file_type)
  33. with open(save_path + file_name, 'wb+') as f:
  34. for chunk in file_obj.chunks():
  35. f.write(chunk)
  36. return HttpResponse(status=200)
  37. elif request.method == 'GET':
  38. if DEBUG:
  39. return render(request, 'upload_file.html')
  40. else:
  41. return HttpResponse(status=400)
  42. @login_required
  43. def download_file(request):
  44. if request.method == "POST":
  45. file_path = request.GET.get('file_path')
  46. file_name = file_path.split('/')[-1]
  47. file_dir = BASE_DIR + '/' + file_path
  48. file = open(file_dir, 'rb')
  49. response = FileResponse(file)
  50. response['Content-Type'] = 'application/octet-stream'
  51. response['Content-Disposition'] = 'attachment;filename={}'.format(urlquote(file_name))
  52. return response
  53. elif request.method == 'GET':
  54. if DEBUG:
  55. return render(request, 'download_file.html')
  56. else:
  57. return HttpResponse(status=400)
  58. @login_required
  59. def delete_file(request):
  60. if request.method == "POST":
  61. file_path = request.GET.get('file_path')
  62. File.objects.get(file_path=file_path, file_id=request.File.file_id).delete()
  63. try:
  64. os.remove(BASE_DIR + '/' + file_path)
  65. except Exception as e:
  66. print(e)
  67. return HttpResponse(status=200)
  68. elif request.method == 'GET':
  69. if DEBUG:
  70. return render(request, 'delete_file.html')
  71. else:
  72. return HttpResponse(status=400)