功能变化: 附件管理更新

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_ak_sk.settings import * # 秘钥管理管理
# from dvadmin_tenants.settings import * # 租户管理
from dvadmin_cloud_storage.settings import * # 云存储
# ...
# ********** 一键导入插件配置结束 **********

View File

@ -1,5 +1,6 @@
import hashlib
import os
from pathlib import PurePath, PureWindowsPath, PurePosixPath
from django.contrib.auth.models import AbstractUser
from django.db import models
@ -296,7 +297,7 @@ class OperationLog(CoreModel):
def media_file_name(instance, filename):
h = instance.md5sum
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):
@ -317,7 +318,8 @@ class FileList(CoreModel):
if not self.size:
self.size = self.url.size
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)
class Meta:

View File

@ -1,7 +1,9 @@
import hashlib
import mimetypes
from rest_framework import serializers
from application import dispatch
from dvadmin.system.models import FileList
from dvadmin.utils.serializers import CustomModelSerializer
from dvadmin.utils.viewset import CustomModelViewSet
@ -12,25 +14,45 @@ class FileSerializer(CustomModelSerializer):
def get_url(self, instance):
# 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:
model = FileList
fields = "__all__"
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'))
# 1. 是否需要备份到本地服务器
# 2. 需要备份就把 validated_data['url'] 赋值
validated_data['url'] = self.initial_data.get('file')
# 3. 上传到云对象存储
# 4. 如果不需要备份,需要把
# validated_data['size']
# validated_data['file_url']
# validated_data['md5']
# validated_data['engine']
# 5. 获取一下媒体类型 mime_type 进行保存
validated_data['mime_type'] = mimetypes.guess_type(self.initial_data.get('file'))[0]
validated_data['size'] = file_size
validated_data['md5sum'] = hashlib.md5().hexdigest()
validated_data['engine'] = file_engine
validated_data['mime_type'] = mimetypes.guess_type(str(file))[0]
if file_backup:
validated_data['url'] = file
if file_engine =='oss':
from dvadmin_cloud_storage.views.aliyun import ali_oss_upload
file_path = ali_oss_upload(file)
if file_path:
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)