# 图片快速入门
# 概述
本文档可以帮助您使用Image-SDK 以同步(sync)或异步(async)的方式做设备图片的上传下载、设备图片元数据查询与统计等。
瀚云图片服务特性
- 图片格式只能是:jpg、png、bmp、gif、webp、tiff。
- 免费产品流量限制:上传月流量100M,下载月流量1G。
- 免费产品图片存储时间:3个月。
- 所有下载类接口均支持动态生成的缩略图。
- 每次调用只能下载一张图片。
- 平台为每张图片生成对应元数据,包括唯一ID。
- 单个图片最大20m。
# 快速资源
# 前期准备
关于如何创建账号、产品、设备,请参考 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>
本地maven引入:
release最新源码包下载地址:https://github.com/hanclouds/image-sdk/releases (opens new window)
请下载后直接打包本地安装(
mvn install
),然后在pom.xml
文件中加入以下依赖。
<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文档自行开发。
源码地址:
# Image-SDK升级
随着平台的迭代发展,API数据会随着功能逐渐增加,API具体参数也会随着功能进行修改。我们会保证重大版本的API兼容性。意味着您使用1.1-RELEASE
版本的ImageSDK,如果您没有其它功能需求,在v1
版本API废弃前均可使用,即使ImageSDK有额外版本升级。
唯一例外条件是ImageSDK或平台出现Bug或安全漏洞不得不对某些ImageSDK进行调整,请关注我们研发社区和官方站点。