django-vue-admin/backend/dvadmin/system/views/file_list.py

75 lines
2.5 KiB
Python
Raw Normal View History

2023-04-21 14:51:35 +00:00
import hashlib
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-26 07:24:57 +00:00
file_engine = dispatch.get_system_config_values("fileStorageConfig.file_engine") or 'local'
2023-04-21 14:51:35 +00:00
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
2023-04-26 07:24:57 +00:00
if file_engine == 'oss':
2023-04-21 14:51:35 +00:00
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 = []