2023-04-21 14:51:35 +00:00
|
|
|
import hashlib
|
2023-04-21 07:44:01 +00:00
|
|
|
import mimetypes
|
|
|
|
|
2022-04-05 05:22:26 +00:00
|
|
|
from rest_framework import serializers
|
|
|
|
|
2023-04-21 14:51:35 +00:00
|
|
|
from application import dispatch
|
2022-04-05 05:22:26 +00:00
|
|
|
from dvadmin.system.models import FileList
|
|
|
|
from dvadmin.utils.serializers import CustomModelSerializer
|
|
|
|
from dvadmin.utils.viewset import CustomModelViewSet
|
|
|
|
|
|
|
|
|
|
|
|
class FileSerializer(CustomModelSerializer):
|
|
|
|
url = serializers.SerializerMethodField(read_only=True)
|
|
|
|
|
|
|
|
def get_url(self, instance):
|
2023-04-21 06:41:00 +00:00
|
|
|
# return 'media/' + str(instance.url)
|
2023-04-21 14:51:35 +00:00
|
|
|
return instance.file_url or (f'media/{str(instance.url)}')
|
2022-04-05 05:22:26 +00:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = FileList
|
|
|
|
fields = "__all__"
|
|
|
|
|
|
|
|
def create(self, validated_data):
|
2023-04-21 14:51:35 +00:00
|
|
|
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
|
2023-04-21 16:03:25 +00:00
|
|
|
validated_data['name'] = file.name
|
2023-04-21 14:51:35 +00:00
|
|
|
validated_data['size'] = file_size
|
|
|
|
validated_data['md5sum'] = hashlib.md5().hexdigest()
|
|
|
|
validated_data['engine'] = file_engine
|
2023-04-21 16:03:25 +00:00
|
|
|
validated_data['mime_type'] = file.content_type
|
2023-04-21 14:51:35 +00:00
|
|
|
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
|
|
|
|
# 审计字段
|
2023-04-21 15:29:09 +00:00
|
|
|
try:
|
|
|
|
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
|
|
|
|
except:
|
|
|
|
pass
|
2022-04-05 05:22:26 +00:00
|
|
|
return super().create(validated_data)
|
|
|
|
|
|
|
|
|
|
|
|
class FileViewSet(CustomModelViewSet):
|
|
|
|
"""
|
|
|
|
文件管理接口
|
|
|
|
list:查询
|
|
|
|
create:新增
|
|
|
|
update:修改
|
|
|
|
retrieve:单例
|
|
|
|
destroy:删除
|
|
|
|
"""
|
|
|
|
queryset = FileList.objects.all()
|
|
|
|
serializer_class = FileSerializer
|
|
|
|
filter_fields = ['name', ]
|
2022-04-15 13:26:01 +00:00
|
|
|
permission_classes = []
|