views.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 .judgement_function import judge_filepath, format_size
  9. from django.utils.http import urlquote
  10. from django.contrib.auth.models import User
  11. import json
  12. import os
  13. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  14. DEBUG = 1
  15. # Create your views here.
  16. #
  17. @login_required
  18. def upload_file(request):
  19. if request.method == "POST":
  20. data = request.POST
  21. file_obj = request.FILES.get('file')
  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=file_folder,
  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. file_path = request.GET.get('file_path')
  50. file_name = file_path.split('/')[-1]
  51. file_dir = BASE_DIR + '/' + file_path
  52. file = open(file_dir, 'rb')
  53. response = FileResponse(file)
  54. response['Content-Type'] = 'application/octet-stream'
  55. response['Content-Disposition'] = 'attachment;filename={}'.format(urlquote(file_name))
  56. return response
  57. elif request.method == 'GET':
  58. if DEBUG:
  59. return render(request, 'download_file.html')
  60. else:
  61. return HttpResponse(status=400)
  62. @login_required
  63. def delete_file(request):
  64. if request.method == "POST":
  65. file_path = request.GET.get('file_path')
  66. File.objects.get(file_path=file_path, file_id=request.File.file_id).delete()
  67. try:
  68. os.remove(BASE_DIR + '/' + file_path)
  69. except Exception as e:
  70. print(e)
  71. return HttpResponse(status=200)
  72. elif request.method == 'GET':
  73. if DEBUG:
  74. return render(request, 'delete_file.html')
  75. else:
  76. return HttpResponse(status=400)