Quellcode durchsuchen

upload/download file via secure_transport, with base64 encoding

ignatz vor 4 Jahren
Ursprung
Commit
a32f250b52
1 geänderte Dateien mit 17 neuen und 28 gelöschten Zeilen
  1. 17 28
      file/views.py

+ 17 - 28
file/views.py

@@ -1,19 +1,14 @@
 from account.decorators import login_required
 from file.models import File
-from django.http import FileResponse, JsonResponse, HttpResponse
-from django.utils import timezone
 
 from folder.models import Folder
-from .judgement_function import judge_filepath, format_size
-from django.utils.http import urlquote
-import os
+from .judgement_function import judge_filepath
 from account.models import get_user
 from utils.debug import debug_view
 from utils.http import make_json_response
 from utils.permission import can_delete
 from utils.crypto import secure_transport
-
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+import base64
 
 # Create your views here.
 
@@ -25,13 +20,8 @@ def upload_file(request):
     data = request.POST
     user = get_user(request)
     key = data.get('token')
-    try:
-        file_obj = request.FILES.get('file')
-    except:
-        return make_json_response(code=400, error='文件不存在')
-    update_time = timezone.now().strftime("%Y-%m-%d %H:%M:%S")
-    file_size = file_obj.size
-    file_name = file_obj.name
+    file_b64 = data.get('file_b64')
+    file_name = data.get('file_name')
     file_type = judge_filepath(file_name.split('.')[-1].lower()) if '.' in file_name else ''
     father_folder_id = data.get('father_folder_id')
     try:
@@ -42,21 +32,19 @@ def upload_file(request):
         return make_json_response(code=404, error='没有上传文件的权限')
     file = File.objects.create(file_name=file_name,
                                father_folder=folder,
-                               update_time=update_time,
-                               file_size=file_size,
                                file_type=file_type,
                                owner=user,
                                group=folder.group,
                                key=key)
-    # TODO: 文件hash
     try:
-        file_dir = BASE_DIR + '/' + str(file.file_id)
-        with open(file_dir, 'wb+') as f:
-            for chunk in file_obj.chunks():
-                f.write(chunk)
+        file_path = file.get_path()
+        f = open(file_path, 'wb+')
+        f.write(base64.b64decode(file_b64))
+        f.close()
     except:
         file.delete()
         return make_json_response(code=500, error='文件保存失败')
+
     return make_json_response()
 
 
@@ -72,13 +60,14 @@ def download_file(request):
         return make_json_response(code=402, error='文件不存在')
     if not file.father_folder.check_permission(user=user):
         return make_json_response(code=404, error='没有下载文件的权限')
-    file_name = file.file_name
-    file_dir = BASE_DIR + '/' + str(file.file_id)
-    file = open(file_dir, 'rb')
-    response = FileResponse(file)
-    response['Content-Type'] = 'application/octet-stream'
-    response['Content-Disposition'] = 'attachment;filename={}'.format(urlquote(file_name))
-    return response
+    try:
+        file_path = file.get_path()
+        f = open(file_path, 'rb')
+        file_b64 = base64.b64encode(f.read())
+        f.close()
+    except:
+        return make_json_response(code=500, error='文件读取失败')
+    return make_json_response(file_b64=file_b64, **file.to_json())
 
 
 @secure_transport