|
|
@@ -1,6 +1,8 @@
|
|
|
from account.decorators import login_required
|
|
|
from file.models import File
|
|
|
|
|
|
+from django.http import FileResponse
|
|
|
+from django.utils.http import urlquote
|
|
|
from folder.models import Folder
|
|
|
from .judgement_function import judge_filepath
|
|
|
from account.models import get_user
|
|
|
@@ -14,14 +16,23 @@ import base64
|
|
|
|
|
|
|
|
|
@secure_transport
|
|
|
-# @debug_view(template_name='upload_file.html')
|
|
|
+@debug_view(template_name='upload_file.html')
|
|
|
@login_required
|
|
|
def upload_file(request):
|
|
|
data = request.POST
|
|
|
user = get_user(request)
|
|
|
key = data.get('key')
|
|
|
- file_b64 = data.get('file_b64')
|
|
|
- file_name = data.get('file_name')
|
|
|
+ if key:
|
|
|
+ file_b64 = data.get('file_b64')
|
|
|
+ if not file_b64:
|
|
|
+ return make_json_response(code=400, error='文件不存在')
|
|
|
+ file_name = data.get('file_name')
|
|
|
+ else:
|
|
|
+ try:
|
|
|
+ file_obj = request.FILES.get('file')
|
|
|
+ except:
|
|
|
+ return make_json_response(code=400, error='文件不存在')
|
|
|
+ file_name = file_obj.name
|
|
|
file_type = judge_filepath(file_name.split('.')[-1].lower()) if '.' in file_name else ''
|
|
|
father_folder_id = data.get('father_folder_id')
|
|
|
try:
|
|
|
@@ -38,10 +49,13 @@ def upload_file(request):
|
|
|
key=key)
|
|
|
try:
|
|
|
file_path = file.get_path()
|
|
|
- f = open(file_path, 'wb+')
|
|
|
- f.write(base64.b64decode(file_b64))
|
|
|
- f.close()
|
|
|
- except:
|
|
|
+ with open(file_path, 'wb+') as f:
|
|
|
+ if key:
|
|
|
+ f.write(base64.b64decode(file_b64))
|
|
|
+ else:
|
|
|
+ for chunk in file_obj.chunks():
|
|
|
+ f.write(chunk)
|
|
|
+ except Exception as e:
|
|
|
file.delete()
|
|
|
return make_json_response(code=500, error='文件保存失败')
|
|
|
|
|
|
@@ -63,11 +77,21 @@ def download_file(request):
|
|
|
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())
|
|
|
+ if file.key:
|
|
|
+ try:
|
|
|
+ file_b64 = base64.b64encode(f.read()).decode()
|
|
|
+ f.close()
|
|
|
+ except:
|
|
|
+ return make_json_response(code=500, error='文件读取失败')
|
|
|
+ return make_json_response(file_b64=file_b64, **file.to_json())
|
|
|
+ else:
|
|
|
+ file_name = file.file_name
|
|
|
+ response = FileResponse(f)
|
|
|
+ response['Content-Type'] = 'application/octet-stream'
|
|
|
+ response['Content-Disposition'] = 'attachment;filename={}'.format(urlquote(file_name))
|
|
|
+ return response
|
|
|
|
|
|
|
|
|
@secure_transport
|