首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >请问遇到InvalidAccessKeyId问题,如何解决?

请问遇到InvalidAccessKeyId问题,如何解决?

提问于 2018-11-15 10:59:38
回答 1关注 0查看 3.8K

代码如下:

代码语言:js
复制
   /**
 * 采用   自定义响应体授权
 *
 * 这是我们自己网络请求的回调,在成功后界面返回的数据,然后给到
 *
 *             secretId = keySecretBean.getData().getCredentials().getTmpSecretId();
 *             signKey = keySecretBean.getData().getCredentials().getTmpSecretKey();
 *             beginTime = System.currentTimeMillis() / 1000;
 *             expiredTime = keySecretBean.getData().getExpiredTime();
 *
 *
 */
class MyRequestCallBack implements RequestCallBack {

    @Override
    public void onRequestSuccess(String result) {
        Log.e("HttpManager", "结果数据===" + result);
        Gson gson = new Gson();
        KeySecretBean keySecretBean = gson.fromJson(result, KeySecretBean.class);

        secretId = keySecretBean.getData().getCredentials().getTmpSecretId();
        signKey = keySecretBean.getData().getCredentials().getTmpSecretKey();
        beginTime = System.currentTimeMillis() / 1000;
        expiredTime = keySecretBean.getData().getExpiredTime();

        MyCredentialProvider credentialProvider = new MyCredentialProvider();
        CosXmlServiceConfig cosXmlServiceConfig = new CosXmlServiceConfig.Builder()
                .setAppidAndRegion(appid, region)
                .setDebuggable(true)
                .builder();
        cosXmlService = new CosXmlService(MainActivity.this, cosXmlServiceConfig, credentialProvider);
        TransferConfig transferConfig = new TransferConfig.Builder().setDividsionForCopy(5 * 1024 * 1024) // 是否启用分片复制的文件最小大小
                .setSliceSizeForCopy(5 * 1024 * 1024) //分片复制时的分片大小
                .setDivisionForUpload(2 * 1024 * 1024) // 是否启用分片上传的文件最小大小
                .setSliceSizeForCopy(1024 * 1024) //分片上传时的分片大小
                .build();
        transferManager = new TransferManager(cosXmlService, transferConfig);
        try {
            credentialProvider.fetchNewCredentials();
        } catch (QCloudClientException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onRequestFailed(String errorMsg) {
        Log.e("HttpManager", "失败数据===" + errorMsg);
    }
}

public void onInitClick(View view) {
    request();
}

/**
 * 获取临时的密钥
 */
private void request() {
    RequestManager requestManager = new RequestManagerI(MainActivity.this, API_URL);
    HashMap<String, String> parames = new HashMap<>();
    parames.put("client", "");
    parames.put("uid", "1");
    try {
        requestManager.postRequestByAsyn("api/bucket/keysecret", parames, new MyRequestCallBack());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 点击上传的按钮
 * @param view
 */
public void onUploadClick(View view) {
    //String bucket = "";
    String cosPath = "/work/1/KeySecretTest.txt";
    String localPath = Environment.getExternalStorageDirectory() + "/KeySecretTest.txt";
    Log.v("QCloudHttp", "localPath == " + localPath);
    upload(bucket+appid, cosPath, localPath);
}

/**
 * 上传
 *
 * @params bucket  bucket 名称
 * @params cosPath 上传到 COS 的路径
 * @params localPath 本地文件路径
 */
public void upload(String bucket, String cosPath, String localPath) {
    // 开始上传,并返回生成的 COSXMLUploadTask
    Log.v("QCloudHttp", "执行上传   == " + localPath);
    COSXMLUploadTask cosxmlUploadTask = transferManager.upload(bucket, cosPath, localPath, null);

    // 设置上传状态监听
    cosxmlUploadTask.setTransferStateListener(new TransferStateListener() {
        @Override
        public void onStateChanged(final TransferState state) {
            Log.e("HttpManager", "TransferState ===  " + state.toString());
        }
    });

    // 设置上传进度监听
    cosxmlUploadTask.setCosXmlProgressListener(new CosXmlProgressListener() {
        @Override
        public void onProgress(final long complete, final long target) {

        }
    });

    // 设置结果监听
    cosxmlUploadTask.setCosXmlResultListener(new CosXmlResultListener() {
        @Override
        public void onSuccess(CosXmlRequest request, CosXmlResult result) {
            Log.e("HttpManager", "CosXmlResult ===  " + result.httpCode);
        }

        @Override
        public void onFail(CosXmlRequest request, CosXmlClientException exception, CosXmlServiceException serviceException) {
            Log.e("HttpManager", "CosXmlClientException ===  " + exception.getMessage());
            Log.e("HttpManager", "CosXmlServiceException ===  " + serviceException.getMessage());
        }
    });
}

private void requestPermissions() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
    }
}

// 然后解析响应,获取密钥信息
class MyCredentialProvider extends BasicLifecycleCredentialProvider {

    @Override
    protected QCloudLifecycleCredentials fetchNewCredentials() throws QCloudClientException{
        return new BasicQCloudCredentials(secretId, signKey, beginTime, expiredTime);
    }
}

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档