drf 媒体资源配置

settings

# MEDIA 存放路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# MEDIA 路由前缀
MEDIA_URL = "/media/"

urls.py

urlpatterns = [
    # 匹配media路由
    re_path(r"^media/(?P<path>.*)$", serve, {'document_root': settings.MEDIA_ROOT}, name='media')
]

访问

http://127.0.0.1:8000/media/qrcode.png

上传方法

import datetime
import os
from django.conf import settings
from django.core.files.storage import default_storage

# 命名去重与上传
def get_upload(file):
    now_data = datetime.datetime.now().strftime('%Y/%m/%d')
    upload_file = os.path.join(settings.MEDIA_ROOT, now_data)
    file_path = os.path.join(upload_file, file.name)
    upload_path = default_storage.save(file_path, file)
    return default_storage.url(upload_path)

上传接口

    @action(methods=['post'], detail=False, url_name=None)
    def upload(self, request):
        try:
            file_path = get_upload(request.FILES.get('file'))
        except Exception as e:
            return Response(
                {"msg": "上传失败", "code": returnCode.ERROR, "detail": e},
                status=status.HTTP_200_OK)
        # 拼接当前host路由路径
        abs_url = request.build_absolute_uri(file_path)
        return Response(
            {"msg": "上传成功", "code": returnCode.SUCCESS, "data": {"abs_url": abs_url, "path": file_path}},
            status=status.HTTP_200_OK)
posted @ 2022-12-13 15:56  Sherwin_szw  阅读(27)  评论(0编辑  收藏  举报