Esempio n. 1
0
def cos_credential(request, project_id):
    """ 获取cos上传临时凭证 """
    per_file_limit = request.tracer.price_policy.per_file_size * 1024 * 1024
    total_file_limit = request.tracer.price_policy.project_space * 1024 * 1024 * 1024

    total_size = 0
    file_list = json.loads(request.body.decode('utf-8'))
    # 单文件大小限制校验
    for item in file_list:
        # 文件的字节大小 item['size'] = B
        # 单文件限制的大小 M
        # 超出限制
        if item['size'] > per_file_limit:
            msg = "单文件超出限制(最大{}M),文件:{},请升级套餐。".format(request.tracer.price_policy.per_file_size, item['name'])
            return JsonResponse({'status': False, 'error': msg})
        total_size += item['size']

        # 做容量限制:单文件 & 总容量

    # 总容量进行限制
    # request.tracer.price_policy.project_space  # 项目的允许的空间
    # request.tracer.project.use_space # 项目已使用的空间
    if request.tracer.project.use_space + total_size > total_file_limit:
        return JsonResponse({'status': False, 'error': "容量超过限制,请升级套餐。"})

    # 获取临时凭证并返回
    data_dict = credential(request.tracer.project.bucket, request.tracer.project.region)
    return JsonResponse({'status': True, 'data': data_dict})
Esempio n. 2
0
def cos_credential(request, project_id):
    # 获取cos上传临时凭证& 做容量限制:单文件&总容量
    file_list = json.loads(request.body.decode('utf-8'))
    per_file_limit = request.tracer.price_policy.per_file_size * 1024 * 1024
    total_file_limit = request.tracer.price_policy.per_file_size * 1024 * 1024 * 1024

    total_size = 0
    for item in file_list:
        if item['size'] > per_file_limit:
            name = item['name']
            return JsonResponse({
                'status':
                False,
                'error':
                f'单文件超出限制(最大{request.tracer.price_policy.per_file_size}M, 文件:{name})'
            })
        total_size += item['size']
    if total_size + request.tracer.project.use_space > total_file_limit:
        return JsonResponse({'status': False, 'error': '容量超出限制, 请升级套餐'})

    data_dict = credential(
        request.tracer.project.bucket,
        request.tracer.project.region,
    )
    return JsonResponse({'status': True, 'data': data_dict})
Esempio n. 3
0
def cos_credential(request, project_id):
    """获取cos上传的临时凭证"""
    # 单文件大小(字节)
    per_file_limit = request.tracer.price_policy.per_file_size * 1024 * 1024
    # 项目总空间(字节)
    total_file_limit = request.tracer.price_policy.project_space * 1024 * 1024 * 1024

    total_size = 0
    file_list = json.loads(request.body.decode('utf-8'))
    for item in file_list:
        # 是否超过单文件大小
        if item['size'] > per_file_limit:
            msg = "单文件超出限制(最大 {} M),文件:{},请升级套餐".format(
                request.tracer.price_policy.per_file_size, item['name'])
            return JsonResponse({'status': False, 'error': msg})
        total_size += item['size']

    # 总容量限制
    if request.tracer.project.use_space + total_size > total_file_limit:
        return JsonResponse({'status': False, 'error': "容量超过限制,请升级套餐。"})

    # 生成临时凭证
    data_dict = credential(request.tracer.project.bucket,
                           request.tracer.project.region)
    return JsonResponse({'status': True, 'data': data_dict})
Esempio n. 4
0
def cos_credential(request, project_id):
    """
    获取cos上传临时凭证
    # 做容量限制:单文件 & 总容量
    :param request:
    :return:
    """
    # 单文件限制的大小,数据库中单位M,将M转换为字节,因为前端传过来是字节
    per_file_limit = request.tracer.price_policy.per_file_size * 1024 * 1024
    total_file_limit = request.tracer.price_policy.project_space * 1024 * 1024 * 1024
    total_size = 0
    file_list = json.loads(request.body.decode("utf-8"))
    for item in file_list:
        # 上传文件的字节大小,单位字节 item['size'] = B
        if item.get('size') > per_file_limit:  # 单文件超出限制
            msg = "单文件超出限制(最大{0}M,文件:{1},请升级套餐。".format(
                request.tracer.price_policy.per_file_size, item["name"])
            return JsonResponse({"status": False, "error": msg})
        total_size += item['size']

    # 总容量进行限制
    # request.tracer.price_policy.project_space  # 项目的允许的空间
    # request.tracer.project.user_space  # 项目已使用的空间
    if request.tracer.project.user_space + total_size > total_file_limit:
        return JsonResponse({"status": False, "error": "容量超过限制,请升级套餐"})

    data_dict = credential(request.tracer.project.bucket,
                           request.tracer.project.region)
    return JsonResponse({"status": True, "data": data_dict})
Esempio n. 5
0
def cos_credential(request, project_id):
    """获取上传的临时凭证"""

    file_list = json.loads(request.body.decode('utf-8'))
    # print(file_list)
    per_file_limit = request.tracer.price_policy.per_file_size * 1024 * 1024  # 每个项目中单个文件大小限制 (MB 转 B)
    total_file_limit = request.tracer.price_policy.project_space * 1024 * 1024  # 单个项目总空间  (MB 转 B)
    cur_use_space = Project.objects.get(id=project_id).use_space   # 项目已经使用的空间

    # 检查文件大小是否符合要求
    total_size = 0
    for item in file_list:
        # 文件的字节大小 item['size'] = B
        # 单文件限制的大小 M
        if item['size'] > per_file_limit:
            err_msg = "单文件超出限制(最大{}MB),文件:{},请升级套餐。".format(request.tracer.price_policy.per_file_size, item['name'])
            return JsonResponse({'status': False, 'error': err_msg})
        total_size += item['size']

    # 上传的文件总容量校验
    if total_size + cur_use_space > total_file_limit:
        msg = "项目总容量超出限制(最大{}MB),请升级套餐".format(request.tracer.price_policy.project_space)
        return JsonResponse({'status': False, 'error': msg})

    # todo 校验当前文件夹中是否已经存在这个文件名

    # 文件大小符合要求,获取临时密钥
    bucket = request.tracer.project.bucket
    region = request.tracer.project.region
    data_dict = credential(bucket, region)

    # print(data_dict)
    return JsonResponse({'status': True, 'data': data_dict})
Esempio n. 6
0
def cos_credential(request, project_id):
    """获取临时凭证给前台"""
    # 后台接收参数使用json.loads(request.body.decode('utf-8'))
    file_list = json.loads(request.body.decode('utf-8'))
    per_file_limit = request.bug_mgt.price_policy.per_file_size * 1024 * 1024
    total_size = 0
    for item in file_list:
        # 单文件大小限制
        if item['size'] > per_file_limit:
            msg = "单文件大小超出限制(最大{}M), 文件:{}".format(
                request.bug_mgt.price_policy.per_file_size, item['name'])
            return JsonResponse({'status': False, 'error': msg})
        total_size += item['size']
    # 总容量进行限制
    if total_size > (request.bug_mgt.price_policy.project_space -
                     request.bug_mgt.project.used_space) * 1024 * 1024:
        return JsonResponse({'status': False, 'error': '超出总容量限制,请升级套餐'})
        print(file_list)
    data_dict = credential(request.bug_mgt.project.bucket,
                           request.bug_mgt.project.region)
    return JsonResponse({'status': True, 'data': data_dict}, safe=False)
Esempio n. 7
0
def cos_credential(request, project_id):
    """获取cos上传时的临时凭证"""
    # 向前端返回临时凭证的时候,做容量限制:单文件&多文件

    # 获取要上传的每个文件&文件大小
    # 这里接受的是一个前端经JSON处理的data ==> json.loads()
    total_size = 0
    file_list = json.loads(request.body.decode('utf-8'))
    per_file_max = request.tracer.price_policy.per_file_size * 1024 * 1024
    # 首先校验当文件大小限制
    for item in file_list:
        if item["size"] > per_file_max:
            return JsonResponse({
                "status":
                False,
                "error":
                "当文件超出限制:{}, 最大{}M,".format(
                    item["name"], request.tracer.price_policy.per_file_size),
                "a_info":
                "请升级会员!"
            })
        total_size += item["size"]

    # 单个文件没有超出限制的话,查看总容量
    more_max = request.tracer.price_policy.project_space * 1024 * 1024 * 1024  # 项目的允许空间
    use_now = request.tracer.project.user_space  # 项目已使用空间
    if use_now + total_size > more_max:
        return JsonResponse({
            "status": False,
            "error": "容量超出限制,请升级会员!",
            "src": "请升级会员!"
        })

    data = credential(request.tracer.project.bucket,
                      request.tracer.project.region)
    return JsonResponse({"status": True, "data": data})
Esempio n. 8
0
def cos_credential(request, project_id):
    """获取cos上传临时凭证"""
    # 获取每个要上传的文件和大小
    per_file_limit = request.lxyker.price_policy.per_file_size * 1024 ** 2
    total_file_limit = request.lxyker.price_policy.per_file_size * 1024 ** 3

    total_size = 0
    file_list = json.loads(request.body.decode('utf-8'))
    for item in file_list:  # 循环每个文件,判断单个文件大小是否超出限制,计算全部文件大小total_size
        if item['size'] > per_file_limit:
            msg = '文件{}大小超过限制{}M'.format(item['name'], request.lxyker.price_policy.per_file_size)
            return JsonResponse({'status': False, 'error': msg})
        else:
            total_size += item['size']

    # 进行总容量限制
    # request.lxyker.price_policy.project_space  # 项目可用总空间
    # request.lxyker.project.use_space  # 项目已使用的空间

    if request.lxyker.project.use_space + total_size > total_file_limit:
        return JsonResponse({'status': False, 'error': '容量不足,请升级套餐!'})

    data_dict = credential(request.lxyker.project.bucket, request.lxyker.project.region)
    return JsonResponse({'status': True, 'data': data_dict})