功能变化: 附件管理更新

pull/95/head
猿小天 2023-04-21 22:51:35 +08:00
parent 5927f60610
commit b78c21359d
3 changed files with 39 additions and 14 deletions

View File

@ -408,6 +408,7 @@ PLUGINS_URL_PATTERNS = []
# from dvadmin_uniapp.settings import * # UniApp后端 # from dvadmin_uniapp.settings import * # UniApp后端
# from dvadmin_ak_sk.settings import * # 秘钥管理管理 # from dvadmin_ak_sk.settings import * # 秘钥管理管理
# from dvadmin_tenants.settings import * # 租户管理 # from dvadmin_tenants.settings import * # 租户管理
from dvadmin_cloud_storage.settings import * # 云存储
# ... # ...
# ********** 一键导入插件配置结束 ********** # ********** 一键导入插件配置结束 **********

View File

@ -1,5 +1,6 @@
import hashlib import hashlib
import os import os
from pathlib import PurePath, PureWindowsPath, PurePosixPath
from django.contrib.auth.models import AbstractUser from django.contrib.auth.models import AbstractUser
from django.db import models from django.db import models
@ -296,7 +297,7 @@ class OperationLog(CoreModel):
def media_file_name(instance, filename): def media_file_name(instance, filename):
h = instance.md5sum h = instance.md5sum
basename, ext = os.path.splitext(filename) basename, ext = os.path.splitext(filename)
return os.path.join("files", h[0:1], h[1:2], h + ext.lower()) return PurePosixPath("files", h[:1], h[1:2], h + ext.lower())
class FileList(CoreModel): class FileList(CoreModel):
@ -317,7 +318,8 @@ class FileList(CoreModel):
if not self.size: if not self.size:
self.size = self.url.size self.size = self.url.size
if not self.file_url: if not self.file_url:
self.file_url = 'media/' + str(self.url) url = media_file_name(self,self.name)
self.file_url = f'media/{url}'
super(FileList, self).save(*args, **kwargs) super(FileList, self).save(*args, **kwargs)
class Meta: class Meta:

View File

@ -1,7 +1,9 @@
import hashlib
import mimetypes import mimetypes
from rest_framework import serializers from rest_framework import serializers
from application import dispatch
from dvadmin.system.models import FileList from dvadmin.system.models import FileList
from dvadmin.utils.serializers import CustomModelSerializer from dvadmin.utils.serializers import CustomModelSerializer
from dvadmin.utils.viewset import CustomModelViewSet from dvadmin.utils.viewset import CustomModelViewSet
@ -12,25 +14,45 @@ class FileSerializer(CustomModelSerializer):
def get_url(self, instance): def get_url(self, instance):
# return 'media/' + str(instance.url) # return 'media/' + str(instance.url)
return instance.file_url or 'media/' + str(instance.url) return instance.file_url or (f'media/{str(instance.url)}')
class Meta: class Meta:
model = FileList model = FileList
fields = "__all__" fields = "__all__"
def create(self, validated_data): def create(self, validated_data):
file_engine = dispatch.get_system_config_values("fileStorageConfig.file_engine")
file_backup = dispatch.get_system_config_values("fileStorageConfig.file_backup")
file = self.initial_data.get('file')
file_size = file.size
validated_data['name'] = str(self.initial_data.get('file')) validated_data['name'] = str(self.initial_data.get('file'))
# 1. 是否需要备份到本地服务器 validated_data['size'] = file_size
# 2. 需要备份就把 validated_data['url'] 赋值 validated_data['md5sum'] = hashlib.md5().hexdigest()
validated_data['url'] = self.initial_data.get('file') validated_data['engine'] = file_engine
# 3. 上传到云对象存储 validated_data['mime_type'] = mimetypes.guess_type(str(file))[0]
# 4. 如果不需要备份,需要把 if file_backup:
# validated_data['size'] validated_data['url'] = file
# validated_data['file_url'] if file_engine =='oss':
# validated_data['md5'] from dvadmin_cloud_storage.views.aliyun import ali_oss_upload
# validated_data['engine'] file_path = ali_oss_upload(file)
# 5. 获取一下媒体类型 mime_type 进行保存 if file_path:
validated_data['mime_type'] = mimetypes.guess_type(self.initial_data.get('file'))[0] validated_data['file_url'] = file_path
else:
raise ValueError("上传失败")
elif file_engine == 'cos':
from dvadmin_cloud_storage.views.tencent import tencent_cos_upload
file_path = tencent_cos_upload(file)
if file_path:
validated_data['file_url'] = file_path
else:
raise ValueError("上传失败")
else:
validated_data['url'] = file
# 审计字段
request_user = self.request.user
validated_data['dept_belong_id'] = request_user.dept.id
validated_data['creator'] = request_user.id
validated_data['modifier'] = request_user.id
return super().create(validated_data) return super().create(validated_data)