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