views.py 3.4 KB

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