# 图片快速入门

# 概述

本文档可以帮助您使用Image-SDK 以同步(sync)或异步(async)的方式做设备图片的上传下载、设备图片元数据查询与统计等。

瀚云图片服务特性

  • 图片格式只能是:jpg、png、bmp、gif、webp、tiff。
  • 免费产品流量限制:上传月流量100M,下载月流量1G。
  • 免费产品图片存储时间:3个月。
  • 所有下载类接口均支持动态生成的缩略图。
  • 每次调用只能下载一张图片。
  • 平台为每张图片生成对应元数据,包括唯一ID。
  • 单个图片最大20m。

# 快速资源

前往Github下载

# 前期准备

关于如何创建账号、产品、设备,请参考 sdk快速入门-前期准备

# 使用ImageSDK

可以使用JitPack或本地maven方式引入瀚云ImageSDK,我们推荐使用JitPack

  • JitPack的方式引入:pom.xml文件中直接加入以下依赖。
  • 当前最新版本为1.1-RELEASE。
<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>com.github.hanclouds</groupId>
        <artifactId>image-sdk</artifactId>
        <version>1.1-RELEASE</version>
    </dependency>
</dependencies>
<dependencies>
    <dependency>
        <groupId>com.hanclouds</groupId>
        <artifactId>image-sdk</artifactId>
        <version>1.1-RELEASE</version>
    </dependency>
</dependencies>

# 上传设备图片代码

productKey, uploadKey, uploadSecret均为创建产品时所产生的鉴权码信息。

/**
  *产品级鉴权上传图片
  */
public void uploadImage() {
        //图片服务地址
        String serverUrl = "https://api.hanclouds.com/image/v1";
        //以下是产品级鉴权上传操作鉴权码信息
        String productKey = "";
        String uploadKey = "";
        String uploadSecret = "";
        //设备key
        String deviceKey = "";
        //数据流名称
        String imageStream = ""
        //图片类型
        Integer imageType = HYImageTypeEnum.HY_IMAGE_JPG.getType();
        //图片数据 这里设置对应图片类型的图片数据
        byte[] imageDatas = null;
		
        HancloudsImageClient client = new HancloudsImageClient(serverUrl);
        //设置产品鉴权参数
        client.putProductAuthParams(productKey, uploadKey, uploadSecret);
        //设置请求参数
        DeviceImageUploadRequest request = new DeviceImageUploadRequest();
        request.setDeviceKey(deviceKey);
        request.setDataName(imageStream);
        //设置图片类型,图片类型有:jpg、png、bmp、gif、webp、tiff
        request.setImageType(imageType);
        //设置图片数据
        request.setData(imageDatas);

        try {
        	//client执行请求
            StringResponse response = client.execute(request);
            if(response.isSuccess()){
                //成功后处理代码 上传成功后会返回图片ID
                String imgId = response.getValue();
            }
        } catch (HanCloudsException e) {
            e.printStackTrace();
        }
    }

以上在上传设备图片代码中,client执行请求时,我们还可以使用异步的方式获取响应结果:

//上传设备图片异步调用
CompletableFuture<StringResponse> future = client.executeAsync(request);
StringResponse response = future.get();
//对response进行处理...

# 下载设备指定图片代码

/**
  *产品级鉴权下载设备指定图片
  */
public void deviceImageGetOne() {
        //图片服务地址
        String serverUrl = "https://api.hanclouds.com/image/v1";
        //以下是以下是产品级鉴权查询操作鉴权码信息
        String productKey = "";
        String queryKey = "";
        String querySecret = "";

        //设备key
        String deviceKey = "";
        //数据流名称
        String imageStream = "";
        //图片ID 通过这个获取图片二进制数据
        String imgId = "bab92b55-96d8-4ed6-8db2-7f349e7def86";
		
        HancloudsImageClient client = new HancloudsImageClient(serverUrl);
        //设置产品鉴权参数
        client.putProductAuthParams(productKey, queryKey, querySecret);
        
        //设置请求参数
        DeviceImageGetOneRequest request = new DeviceImageGetOneRequest();
        request.setDeviceKey(deviceKey);
        request.setDataName(imageStream);
        //设置图片ID
        request.setImgId(imgId);
        //设置图片处理参数,以下两种方式任选一种对图片进行缩略处理
        request.setForcesize("200,200");
        request.setRescale("0.1,0.1");

        try {
        	//client执行请求
            DeviceImageGetOneResponse response = client.execute(request);
            if (response.isSuccess()) {//成功后的处理
            	DeviceImgProcessDTO result = response.getResponse();
            	//返回的图片二进制数据
                byte[] imgdata =  result.getData();
                //返回的图片名
              	String imgname = result.getName();
            }
        } catch (HanCloudsException e) {
            e.printStackTrace();
        }
    }

以上在下载设备指定图片代码中,client执行请求时,我们还可以使用异步的方式获取响应结果:

//下载设备指定图片异步调用
CompletableFuture<DeviceImageGetOneResponse> future = client.executeAsync(request);
DeviceImageGetOneResponse response = future.get();
//对response进行处理...

# 下载设备最新图片代码

/**
  *产品级鉴权下载设备最新图片
  */
public void deviceImageGetLatestOne() {
        //图片服务地址
        String serverUrl = "https://api.hanclouds.com/image/v1";
        //以下是以下是产品级鉴权查询操作鉴权码信息
        String productKey = "";
        String queryKey = "";
        String querySecret = "";

        //设备key
        String deviceKey = "";
        //数据流名称
        String imageStream = "";

        HancloudsImageClient client = new HancloudsImageClient(serverUrl);
        //设置产品鉴权参数
        client.putProductAuthParams(productKey, queryKey, querySecret);

        //设置请求参数
        DeviceImageGetLatestOneRequest request = new DeviceImageGetLatestOneRequest();
        request.setDeviceKey(deviceKey);
        request.setDataName(imageStream);
        //设置图片处理参数,以下两种方式任选一种对图片进行缩略处理
        request.setForcesize("200,200");
        request.setRescale("0.1,0.1");

        try {
        	//client执行请求
            DeviceImageGetOneResponse response = client.execute(request);
            if (response.isSuccess()) {//成功后的处理
                DeviceImgProcessDTO result = response.getResponse();
                //图片名
                String imgname = result.getName();
                //图片二进制数据
                byte[] imgdata = result.getData();
            }
        } catch (HanCloudsException) {
            e.printStackTrace();
        }
    }

以上在下载设备最新图片代码中,client执行请求时,我们还可以使用异步的方式获取响应结果:

//下载设备最新图片异步调用
CompletableFuture<DeviceImageGetOneResponse> future = client.executeAsync(request);
DeviceImageGetOneResponse response = future.get();
//对response进行处理...

# 找到其它API

以上只是几个比较典型的案例,您可以在源代码或者SDK中查找到更多可以执行调用的xxxRequest类进行调用,或者根据API文档自行开发。

源码地址:

https://github.com/hanclouds/image-sdk/tree/master/src/main/java/com/hanclouds/image/req (opens new window)

# Image-SDK升级

随着平台的迭代发展,API数据会随着功能逐渐增加,API具体参数也会随着功能进行修改。我们会保证重大版本的API兼容性。意味着您使用1.1-RELEASE版本的ImageSDK,如果您没有其它功能需求,在v1版本API废弃前均可使用,即使ImageSDK有额外版本升级。

唯一例外条件是ImageSDK或平台出现Bug或安全漏洞不得不对某些ImageSDK进行调整,请关注我们研发社区和官方站点。