DRF 上传文件

from rest_framework.response import Response
from rest_framework import generics
from rest_framework_simplejwt.authentication import JWTAuthentication
from rest_framework.permissions import IsAuthenticated
from pool.response import FitJSONRenderer
from rest_framework import status
from rest_framework.filters import SearchFilter
import logging
from rest_framework.parsers import JSONParser, MultiPartParser, FormParser
import random
import upyun
import os
from rest_framework import serializers

log = logging.getLogger(__name__)


def random_str(n):
    """随机生成n位字符串"""
    return ''.join(random.sample('1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLNOPQRSTUVWYZ', n))


class AppFileUploadSerializer(serializers.ModelSerializer):
    app_file = serializers.FileField()

    class Meta:
        model = AppVersionConfig
        fields = ['app_file']


class ApkUploadView(generics.CreateAPIView):
    parser_classes = (MultiPartParser, FormParser)
    authentication_classes = (JWTAuthentication,)
    renderer_classes = (FitJSONRenderer,)

    def post(self, request, *args, **kwargs):
        serializer = AppFileUploadSerializer(data=request.data)
        if not serializer.is_valid():
            return Response({"message": str(serializer.errors)}, status=400)
        else:
            app_file = request.data.get('app_file')
            suffix = app_file.name.split('.')[-1]
            if suffix in ('apk',):
                new_name = random_str(16) + '.apk'
                with open(new_name, 'wb') as f:  # 二进制写入
                    for i in app_file.chunks():
                        f.write(i)
                # 新建 又拍云上传对象
                up = upyun.UpYun('xxxx', 'xxx', 'xxxx', timeout=30,
                                 endpoint=upyun.ED_AUTO)
                with open(new_name, 'rb') as f:
                    res = up.put(app_file.name, f, checksum=False)
                # 删除文件
                try:
                    os.remove(new_name)
                except Exception as e:
                    log.error('ApkUploadView {} e {}'.format(type(e), e))

                return Response(res, status=200)
            else:
                return Response({"message": '请求参数错误'}, status=status.HTTP_400_BAD_REQUEST)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值