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})
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})
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})
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})
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})
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)
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})
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})