views.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from account.decorators import login_required
  2. from file.models import File
  3. from folder.models import Folder
  4. from .judgement_function import judge_filepath
  5. from account.models import get_user
  6. from utils.debug import debug_view
  7. from utils.http import make_json_response
  8. from utils.permission import can_delete
  9. from utils.crypto import secure_transport
  10. import base64
  11. # Create your views here.
  12. @secure_transport
  13. # @debug_view(template_name='upload_file.html')
  14. @login_required
  15. def upload_file(request):
  16. data = request.POST
  17. user = get_user(request)
  18. key = data.get('key')
  19. file_b64 = data.get('file_b64')
  20. file_name = data.get('file_name')
  21. file_type = judge_filepath(file_name.split('.')[-1].lower()) if '.' in file_name else ''
  22. father_folder_id = data.get('father_folder_id')
  23. try:
  24. folder = Folder.objects.get(folder_id=father_folder_id)
  25. except:
  26. return make_json_response(code=402, error='文件夹不存在')
  27. if not folder.check_permission(user=user):
  28. return make_json_response(code=404, error='没有上传文件的权限')
  29. file = File.objects.create(file_name=file_name,
  30. father_folder=folder,
  31. file_type=file_type,
  32. owner=user,
  33. group=folder.group,
  34. key=key)
  35. try:
  36. file_path = file.get_path()
  37. f = open(file_path, 'wb+')
  38. f.write(base64.b64decode(file_b64))
  39. f.close()
  40. except:
  41. file.delete()
  42. return make_json_response(code=500, error='文件保存失败')
  43. return make_json_response()
  44. @secure_transport
  45. # @debug_view('file_id')
  46. @login_required
  47. def download_file(request):
  48. user = get_user(request)
  49. file_id = request.POST.get('file_id')
  50. try:
  51. file = File.objects.get(file_id=file_id)
  52. except:
  53. return make_json_response(code=402, error='文件不存在')
  54. if not file.father_folder.check_permission(user=user):
  55. return make_json_response(code=404, error='没有下载文件的权限')
  56. try:
  57. file_path = file.get_path()
  58. f = open(file_path, 'rb')
  59. file_b64 = base64.b64encode(f.read())
  60. f.close()
  61. except:
  62. return make_json_response(code=500, error='文件读取失败')
  63. return make_json_response(file_b64=file_b64, **file.to_json())
  64. @secure_transport
  65. # @debug_view('file_id')
  66. @login_required
  67. def delete_file(request):
  68. data = request.POST
  69. user = get_user(request)
  70. file_id = data.get('file_id')
  71. try:
  72. file = File.objects.get(file_id=file_id)
  73. except:
  74. return make_json_response(code=402, error='文件不存在')
  75. if not can_delete(user=user, f=file):
  76. return make_json_response(code=404, error='没有删除文件的权限')
  77. file.delete()
  78. return make_json_response()