|
@@ -1,19 +1,14 @@
|
|
|
from account.decorators import login_required
|
|
from account.decorators import login_required
|
|
|
from file.models import File
|
|
from file.models import File
|
|
|
-from django.http import FileResponse, JsonResponse, HttpResponse
|
|
|
|
|
-from django.utils import timezone
|
|
|
|
|
|
|
|
|
|
from folder.models import Folder
|
|
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 account.models import get_user
|
|
|
from utils.debug import debug_view
|
|
from utils.debug import debug_view
|
|
|
from utils.http import make_json_response
|
|
from utils.http import make_json_response
|
|
|
from utils.permission import can_delete
|
|
from utils.permission import can_delete
|
|
|
from utils.crypto import secure_transport
|
|
from utils.crypto import secure_transport
|
|
|
-
|
|
|
|
|
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
|
|
|
+import base64
|
|
|
|
|
|
|
|
# Create your views here.
|
|
# Create your views here.
|
|
|
|
|
|
|
@@ -25,13 +20,8 @@ def upload_file(request):
|
|
|
data = request.POST
|
|
data = request.POST
|
|
|
user = get_user(request)
|
|
user = get_user(request)
|
|
|
key = data.get('token')
|
|
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 ''
|
|
file_type = judge_filepath(file_name.split('.')[-1].lower()) if '.' in file_name else ''
|
|
|
father_folder_id = data.get('father_folder_id')
|
|
father_folder_id = data.get('father_folder_id')
|
|
|
try:
|
|
try:
|
|
@@ -42,21 +32,19 @@ def upload_file(request):
|
|
|
return make_json_response(code=404, error='没有上传文件的权限')
|
|
return make_json_response(code=404, error='没有上传文件的权限')
|
|
|
file = File.objects.create(file_name=file_name,
|
|
file = File.objects.create(file_name=file_name,
|
|
|
father_folder=folder,
|
|
father_folder=folder,
|
|
|
- update_time=update_time,
|
|
|
|
|
- file_size=file_size,
|
|
|
|
|
file_type=file_type,
|
|
file_type=file_type,
|
|
|
owner=user,
|
|
owner=user,
|
|
|
group=folder.group,
|
|
group=folder.group,
|
|
|
key=key)
|
|
key=key)
|
|
|
- # TODO: 文件hash
|
|
|
|
|
try:
|
|
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:
|
|
except:
|
|
|
file.delete()
|
|
file.delete()
|
|
|
return make_json_response(code=500, error='文件保存失败')
|
|
return make_json_response(code=500, error='文件保存失败')
|
|
|
|
|
+
|
|
|
return make_json_response()
|
|
return make_json_response()
|
|
|
|
|
|
|
|
|
|
|
|
@@ -72,13 +60,14 @@ def download_file(request):
|
|
|
return make_json_response(code=402, error='文件不存在')
|
|
return make_json_response(code=402, error='文件不存在')
|
|
|
if not file.father_folder.check_permission(user=user):
|
|
if not file.father_folder.check_permission(user=user):
|
|
|
return make_json_response(code=404, error='没有下载文件的权限')
|
|
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
|
|
@secure_transport
|