功能变化: 附件管理更新
parent
5927f60610
commit
b78c21359d
|
@ -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 * # 云存储
|
||||
# ...
|
||||
|
||||
# ********** 一键导入插件配置结束 **********
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue