zoe 4 vuotta sitten
vanhempi
commit
b05008188b
8 muutettua tiedostoa jossa 141 lisäystä ja 7 poistoa
  1. 33 0
      file/judgement_function.py
  2. 8 1
      file/models.py
  3. 9 0
      file/urls.py
  4. 78 3
      file/views.py
  5. 2 0
      folder/models.py
  6. 9 0
      folder/urls.py
  7. 2 2
      group/views.py
  8. 0 1
      st_cloud/settings.py

+ 33 - 0
file/judgement_function.py

@@ -0,0 +1,33 @@
+
+
+
+def judge_filepath(file_type):
+    img_list = ['bmp', 'jpg', 'png', 'tif', 'gif', 'pcx', 'tga', 'exif', 'fpx', 'svg', 'psd', 'cdr', 'pcd', 'dxf',
+                'ufo', 'eps', 'ai', 'raw', 'WMF', 'webp']
+    doc_list = ['txt', 'doc', 'xls', 'ppt', 'docx', 'xlsx', 'pptx', 'lrc', 'wps', 'zip', 'rar', '7z', 'torrent', 'pdf']
+    video_list = ['cd', 'ogg', 'mp3', 'asf', 'wma', 'wav', 'mp3pro', 'rm', 'mp4', 'real', 'ape', 'module', 'midi',
+                  'vqf']
+    procedure_list = ['exe', 'py', 'java', 'class', 'pyc', 'app', 'apk', 'bat']
+    if file_type in img_list:
+        file_path = 'img'
+    elif file_type in doc_list:
+        file_path = 'doc'
+    elif file_type in video_list:
+        file_path = 'video'
+    elif file_type in procedure_list:
+        file_path = 'procedure'
+    else:
+        file_path = 'others'
+    return file_path
+
+
+def format_size(old_size):
+    if 1024 < old_size < 1024 * 1024:
+        new_size = round(old_size / 1024, 2)
+        return str(new_size) + 'KB'
+    elif 1024 * 1024 < old_size < 1024 * 1024 * 1024:
+        new_size = round(old_size / (1024 * 1024), 2)
+        return str(new_size) + 'MB'
+    elif old_size > 1024 * 1024 * 1024:
+        new_size = round(old_size / (1024 * 1024 * 1024), 2)
+        return str(new_size) + 'GB'

+ 8 - 1
file/models.py

@@ -10,4 +10,11 @@ class File(models.Model):
     file_name = models.CharField(max_length=50, blank=False)
     # 从属的文件夹
     folder = models.ForeignKey(Folder, on_delete=models.CASCADE, related_name='file_folder')
-    # file存储 置空
+    # 存储路径
+    file_path = models.CharField(max_length=128)
+    # 上传时间
+    update_time = models.DateTimeField()
+    # 文件类型
+    file_type = models.CharField(max_length=32)
+    # 文件大小
+    file_size = models.CharField(max_length=16)

+ 9 - 0
file/urls.py

@@ -0,0 +1,9 @@
+from django.shortcuts import render
+from django.urls import path
+from . import views
+# Create your views here.
+urlpatterns = [
+    path('upload_file/', views.upload_file, name='upload_file'),
+    path('download_file/', views.download_file, name='download_file'),
+    path('delete_file/', views.delete_file, name='delete_file'),
+]

+ 78 - 3
file/views.py

@@ -1,9 +1,84 @@
-from django.shortcuts import render
+from django.shortcuts import render, redirect
+from django.contrib.auth.decorators import login_required
+from file.models import File
+from django.http import FileResponse, JsonResponse, HttpResponse
+from django.utils import timezone
+from judgement_function import judge_filepath, format_size
+from django.utils.http import urlquote
+from django.contrib.auth.models import User
+import json
+import os
+
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+DEBUG = 1
+
 
 # Create your views here.
 
-# 文件位置
 
+#
+
+
+@login_required
+def upload_file(request):
+    if request.method == "POST":
+        file_obj = request.FILES.get('file')
+        file_type = judge_filepath(file_obj.name.split('.')[-1].lower())
+        file_folder = request.POST.get('file_path')
+        update_time = timezone.now().strftime("%Y-%m-%d %H:%M:%S")
+        file_size = format_size(file_obj.size)
+        file_name = file_obj.name
+        save_path = BASE_DIR + '/' + file_folder
+        file_path = file_folder + '/' + file_name
+        File.objects.create(file_id=request.File.file_id,
+                            file_name=file_name,
+                            folder=file_folder,
+                            file_path=file_path,
+                            update_time=update_time,
+                            file_size=file_size,
+                            file_type=file_type)
+        with open(save_path + file_name, 'wb+') as f:
+            for chunk in file_obj.chunks():
+                f.write(chunk)
+        return HttpResponse(status=200)
+    elif request.method == 'GET':
+        if DEBUG:
+            return render(request, 'upload_file.html')
+    else:
+        return HttpResponse(status=400)
+
+
+@login_required
+def download_file(request):
+    if request.method == "POST":
+        file_path = request.GET.get('file_path')
+        file_name = file_path.split('/')[-1]
+        file_dir = BASE_DIR + '/' + file_path
+        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
+    elif request.method == 'GET':
+        if DEBUG:
+            return render(request, 'download_file.html')
+    else:
+        return HttpResponse(status=400)
 
-# 文件上一级
 
+@login_required
+def delete_file(request):
+    if request.method == "POST":
+        file_path = request.GET.get('file_path')
+        File.objects.get(file_path=file_path, file_id=request.File.file_id).delete()
+        try:
+            os.remove(BASE_DIR + '/' + file_path)
+        except Exception as e:
+            print(e)
+        return HttpResponse(status=200)
+    elif request.method == 'GET':
+        if DEBUG:
+            return render(request, 'delete_file.html')
+    else:
+        return HttpResponse(status=400)

+ 2 - 0
folder/models.py

@@ -10,5 +10,7 @@ class Folder(models.Model):
     # 父节点
     father_folder = models.ForeignKey('self', blank=True, on_delete=models.CASCADE, related_name='father_folder')
 
+
+
     def __unicode__(self):
         return self.folder_id

+ 9 - 0
folder/urls.py

@@ -0,0 +1,9 @@
+from django.shortcuts import render
+from django.urls import path
+from . import views
+# Create your views here.
+urlpatterns = [
+    path('folder_list/', views.folder_list, name='folder_list'),
+    path('add_folder/', views.add_folder, name='add_folder'),
+    path('delete_folder/', views.delete_folder, name='delete_folder'),
+]

+ 2 - 2
group/views.py

@@ -35,7 +35,7 @@ def add_group(request):
 
 
 @login_required(login_url='/account/login/')
-def add_group(request):
+def leave_group(request):
     if request.method == 'post':
         # 查找是否有此人
         user = User.objects.filter(username=request.user.username)
@@ -53,7 +53,7 @@ def add_group(request):
             return HttpResponse(status=422)
     elif request.method == 'GET':
         if DEBUG:
-            return render(request, 'add_group.html')
+            return render(request, 'leave_group.html')
     else:
         return HttpResponse(status=400)
 

+ 0 - 1
st_cloud/settings.py

@@ -37,7 +37,6 @@ INSTALLED_APPS = [
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
-    'api.apps.ApiConfig',
     'rest_framework',
 ]