views.py 3.2 KB

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