有客自远方来52 2024-08-22 15:54 采纳率: 15.3%
浏览 4

为什么过去不到临时凭证?(语言-python|开发工具-pycharm)

以下是我的代码,我想获取临时凭证实现往腾讯cos桶上传文件,但为什么前端页面返回桶名称格式错误,我该如何修改?
PYTHON代码

def credential(bucket, region):
    """ 获取cos上传临时凭证 """

    from sts.sts import Sts

    config = {
        # 临时密钥有效时长,单位是秒(30分钟=1800秒)
        'duration_seconds': 5,
        # 固定密钥 id
        'secret_id': settings.TENCENT_COS_ID,
        # 固定密钥 key
        'secret_key': settings.TENCENT_COS_KEY,
        # 换成你的 bucket
        'bucket': bucket,
        # 换成 bucket 所在地区
        'region': region,
        # 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径
        # 例子: a.jpg 或者 a/* 或者 * (使用通配符*存在重大安全风险, 请谨慎评估使用)
        'allow_prefix': '*',
        # 密钥的权限列表。简单上传和分片需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/31923
        'allow_actions': [
            # "name/cos:PutObject",
            # 'name/cos:PostObject',
            # 'name/cos:DeleteObject',
            # "name/cos:UploadPart",
            # "name/cos:UploadPartCopy",
            # "name/cos:CompleteMultipartUpload",
            # "name/cos:AbortMultipartUpload",
            "*",
        ],

    }

    sts = Sts(config)
    result_dict = sts.get_credential()
    return result_dict

@csrf_exempt
def cos_credential(request, project_id):
    """ 获取cos上传临时凭证 """
    data_dict = credential(request.tracer.project.bucket, request.tracer.project.region)
    return JsonResponse(data_dict)

前端代码

<script src="{% static 'js/cos-js-sdk-v5.min.js' %}"></script>
<script>
    var FOLDER_URL = '{% url 'file' project_id=request.tracer.project.id %}'
    var FILE_DELETE_URL = '{% url 'file_delete' project_id=request.tracer.project.id %}'
    var COS_CREDENTIAL = "{% url 'cos_credential' project_id=request.tracer.project.id %}";

    var COS_OBJECT = new COS({
        getAuthorization:function(options,callback){
        //向django后台发送请求,获取临时凭证
        $.get('/cos/credential',{
            //可从options取需要的参数
        },function(data){
            var credentials=data && data.credentials;
            if (!data || !credentials) return console.error('credentials invalid');
            callback({
                TmpSecretId:credentials.tmpSecretId,
                TmpSecretKey:credentials.tmpSecretKey,
                XCosSecurityToken:data.startTime,
                ExpiredTime:data.expiredTime,
            });
        });
    }
});


    $(function(){
        bindUploadFile();

    });

    function bindUploadFile() {
        $('#uploadFile').change(function () {
            var fileList=$(this)[0].files;
            $.each(fileList,function(index,fileObject){
                var fileName=fileObject.name;

                COS_OBJECT.putObject({
                    Bucket:'{{request.tracer.project.bucket}}',
                    Region:'{{request.tracer.project.region}}',
                    Key:fileName,
                    Body:fileObject,
                    onProgress:function(progressData){
                        console.log('文件上传进度--->',fileName,JSON.stringify(progressData));
                    }
                },function(err,data){
                    console.log(err||data);
                });
            })
        });
    }



返回错误

Error: Bucket should format as "test-1250000000".

  • 写回答

1条回答 默认 最新

  • 吃不了席 2024-08-22 17:06
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据您提供的代码和错误信息,问题可能出在前端代码中的Bucket名称格式。错误提示Bucket的格式应为"test-1250000000",而您的代码中使用的是{{request.tracer.project.bucket}}。请尝试将前端代码中的Bucket名称更改为正确的格式,如下所示:

    COS_OBJECT.putObject({
        Bucket: 'test-1250000000', // 修改这里,使用正确的桶名称格式
        Region: '{{request.tracer.project.region}}',
        Key: fileName,
        Body: fileObject,
        onProgress: function (progressData) {
            console.log('文件上传进度--->', fileName, JSON.stringify(progressData));
        }
    }, function (err, data) {
        console.log(err || data);
    });
    

    如果仍然出现问题,请检查后端返回的临时凭证数据是否正确,以及前端代码是否正确处理这些数据。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月22日