spri514905803 2023-10-18 21:01 采纳率: 66.7%
浏览 4

阿里云服务端和客户端建立连接,进行数据上报。java SDK例程,

阿里云建立客户端和服务端连接,失败是什么原因。他说空指针报错。但是我是用的阿里云自带的java SDK例程。中的demo程序,只改了需要改的地方,所以是哪里出错了。

img

这个是我用到的阿里云文档说明
https://help.aliyun.com/zh/iot/developer-reference/connect-a-client-to-iot-platform-by-using-the-sdk-for-java?spm=a2c4g.11186623.0.i1#concept-2340718
希望解答!

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-19 13:52
    关注

    【相关推荐】



    • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/724305
    • 这篇博客你也可以参考下:虹软离线人脸识别java版本的SDK使用配置,也是整了半天才看明白一些,总结一下
    • 除此之外, 这篇博客: 使用腾讯云对象云存储进行上传文件(Java临时秘钥)及小程序SDK使用中的 官方方法一(推荐):后端通过获取临时密钥给到前端,前端计算签名 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      1. QCloundController.java
          // 临时秘钥配置
          TreeMap<String, Object> config = new TreeMap<String, Object>();
          Response credential = null; // 凭证结果
      
          try {
            config.put("SecretId", cosProperties.getSecretId());
            config.put("SecretKey", cosProperties.getSecretKey());
            config.put("durationSeconds", 1800); // 设置可使用事件1800秒 -> 30分钟
            config.put("bucket", cosProperties.getBucketName()); // 存储桶名
            config.put("region", cosProperties.getRegion()); // 地区
            // policy的resource => 前缀
            // 只允许访问: [avatar/*]
            config.put("allowPrefixes", new String[] {
                    cosProperties.getAvatarPrefix()
            });
      
            // 密钥的权限列表。必须在这里指定本次临时密钥所需要的权限。
            // 简单上传、表单上传和分片上传需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/31923
            config.put("allowActions", new String[] {
                    "name/cos:PutObject",// 简单上传
                    "name/cos:PostObject",// 表单上传、小程序上传
                    "name/cos:GetBucket", // 允许获取桶的对象列表
                    // 分片上传
                    "name/cos:InitiateMultipartUpload",
                    "name/cos:ListMultipartUploads",
                    "name/cos:ListParts",
                    "name/cos:UploadPart",
                    "name/cos:CompleteMultipartUpload"
            });
      
            //成功返回临时密钥信息,如下打印密钥信息
            credential = CosStsClient.getCredential(config);
          } catch (Exception e) {
            //失败抛出异常
            e.printStackTrace();
            throw new IllegalArgumentException("no valid secret !");
          }
          return Result.success(credential);
      

      allowPrefixes对应 policy的resource(原本是allowPrefix, 从源码中可以得出)

      allowActions对应policy的action

      policy更多了解:

      https://cloud.tencent.com/document/product/436/31923

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pg36OU2L-1632370381510)(/使用腾讯云对象云存储进行上传文件(Java临时秘钥)]12.png)

      2. 写完java后台就该写前端小程序了
      

      cos.ts

      // cos.ts
      const COS = require('cos-wx-sdk-v5');
      
      
      var cos = new COS({
        getAuthorization: function (options: any, callback: any) {
          console.log(options);
          
          wx.request({
            url: 'http://127.0.0.1:8080/qc/key',
            data: {
            },
            dataType: 'json',
            success: function (result: any) {
              var data = result.data.data;
              console.log(data);
              var credentials = data && data.credentials;
              if (!data || !credentials) return console.error('credentials invalid');
              callback({
                TmpSecretId: credentials.tmpSecretId,
                TmpSecretKey: credentials.tmpSecretKey,
                XCosSecurityToken: credentials.sessionToken,
                // 建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误
                StartTime: data.startTime, // 时间戳,单位秒,如:1580000000
                ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000900
              });
            }
          });
        }
      });
      
      export {
        cos
      }
      

      app.ts:app文件

      import { cos } from './COS/cos';
      
      App<IAppOption>({
        globalData: {
        },
        onLaunch() {
          cos.getBucket({
            Bucket: 'myblogspringboot-1300326898',
            Region: 'ap-nanjing',
            Prefix: 'avatar/', // 这里传入列出的myblogspringboot-1300326898/avatar下的所有文件
          }, function (err: any, data: any) {
            if (err) {
              console.log(err);
              return;
            }
            console.log(data, 2);
          });
        },
      })
      
      • 请求结果

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M9UMjP1U-1632370381511)(/使用腾讯云对象云存储进行上传文件(Java临时秘钥)]13.png)


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月18日