提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
阿里云服务SDK
- 前言
- 一、OSS文件操作
- 文件上传
- 文件上传删除
- 二、EasyExcel
- 三、VOD视频点播功能
- 视频上传功能
- 获取播放地址,客户端进行播放
- 四、短信服务
- 获取短信 获取成功则需要存入redis, 后期便于校验
- 五、总结
前言
此处为阿里云各组件的SDK示例
提示:以下是本篇文章正文内容,下面案例可供参考
一、OSS文件操作
网站 : https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11186623.6.940.7d7367celJzmZ0
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
文件上传
通过参数为MultipartFile的类 以流的形式进行上传 示例 serviceImpl
public String upload(InputStream inputStream, String module, String oFilename) {
String bucketName = ossProperties.getBucketName();
String endpoint = ossProperties.getEndpoint();
String keyId = ossProperties.getKeyId();
String keySecret = ossProperties.getKeySecret();
//判断oss实例是否存在:如果不存在则创建,如果存在则获取
OSS ossClient = new OSSClientBuilder().build(endpoint, keyId, keySecret);
if (!ossClient.doesBucketExist(bucketName)) {
//创建bucket
ossClient.createBucket(bucketName);
//设置oss实例的访问权限:公共读
ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
}
//构建日期路径:avatar/2019/02/26/文件名
String folder = new DateTime().toString("yyyy/MM/dd");
//文件名:uuid.扩展名
String fileName = UUID.randomUUID().toString();
String fileExtension = oFilename.substring(oFilename.lastIndexOf("."));
String key = module + "/" + folder + "/" + fileName + fileExtension;
//文件上传至阿里云
ossClient.putObject(ossProperties.getBucketName(), key, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//返回url地址
return "https://" + bucketName + "." + endpoint + "/" + key;
}
文件上传删除
public void delete(String url) {
String endpoint = ossProperties.getEndpoint();
String keyid = ossProperties.getKeyId();
String keysecret = ossProperties.getKeySecret();
String bucketname = ossProperties.getBucketName();
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, keyid, keysecret);
String host = "https://" + bucketname + "." + endpoint + "/";
String objectName = url.substring(host.length());
// 删除文件。
ossClient.deleteObject(bucketname, objectName);
System.out.println("到此一游");
// 关闭OSSClient。
ossClient.shutdown();
}
二、EasyExcel
public List<Person> getList() {
//遍历每一个Person 每一对象写入一行
List<Person> list = new ArrayList<Person>();
for (int i = 0; i < 10; i++) {
Person person = new Person();
person.setAge(i);
person.setId(i);
person.setName("hello" + i);
person.setSalary(12345.53);
list.add(person);
}
return list;
}
public void simpleWrite() {
// 写法1 指定文件名
String fileName = "D:/练习/test/demo1" + ".xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
// 如果这里想使用03 则 传入excelType参数即可
EasyExcel.write(fileName, Person.class).sheet("模板").doWrite(getList());
}
public void simpleRead07(){
String fileName = "D:/练习/test/demo1"+ ".xlsx";
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
EasyExcel.read(fileName, Person.class, new DemoDataListener()).sheet().doRead();
}
三、VOD视频点播功能
视频上传功能
public R upload(@RequestParam MultipartFile file){
try {
String originalFilename = file.getOriginalFilename();
InputStream inputStream = file.getInputStream();
String vodId = vodService.uploadVod(originalFilename,inputStream);
return R.ok().data("vodId",vodId);
} catch (IOException e) {
throw new GuliException(ResultCodeEnum.FETCH_PLAYAUTH_ERROR);
}
}
}
public String uploadVod(String originalFilename, InputStream inputStream) {
String keyId = vodProperty.getKeyId();
String keySecret = vodProperty.getKeySecret();
//截取文件名
String title = originalFilename.substring(0, originalFilename.lastIndexOf("."));
UploadStreamRequest request = new UploadStreamRequest(keyId, keySecret, title, originalFilename, inputStream);
/* 封面图片(可选) */
request.setCoverURL("https://2020my-guli-file.oss-cn-shanghai.aliyuncs.com/avatar/15.jpg");
/* 点播服务接入点 */
request.setApiRegionId("cn-shanghai");
/* ECS部署区域*/
request.setEcsRegionId("cn-shanghai");
UploadVideoImpl uploader = new UploadVideoImpl();
UploadStreamResponse response = uploader.uploadStream(request);
System.out.print("RequestId=" + response.getRequestId() + "\n"); //请求视频点播服务的请求ID
if (response.isSuccess()) {
System.out.print("VideoId=" + response.getVideoId() + "\n");
} else { //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因
System.out.print("VideoId=" + response.getVideoId() + "\n");
System.out.print("ErrorCode=" + response.getCode() + "\n");
System.out.print("ErrorMessage=" + response.getMessage() + "\n");
}
if (!StringUtils.isEmpty(response.getVideoId())){
throw new GuliException(ResultCodeEnum.VIDEO_UPLOAD_ALIYUN_ERROR);
}
return response.getVideoId();
}
获取播放地址,客户端进行播放
public R getPath(@PathVariable String id){
String pathUrl = vodService.getPath(id);
return R.ok().data("pathUrl",pathUrl);
}
public String getPath(String id) {
String regionId = "cn-shanghai"; // 点播服务接入区域
DefaultProfile profile = DefaultProfile.getProfile(regionId, vodProperty.getKeyId(), vodProperty.getKeySecret());
DefaultAcsClient client = new DefaultAcsClient(profile);
GetVideoPlayAuthResponse response = new GetVideoPlayAuthResponse();
try {
GetPlayInfoRequest request = new GetPlayInfoRequest();
request.setVideoId("f4c778cf38b749109d6980848650df6a");
client.getAcsResponse(request);
//播放凭证
System.out.print("PlayAuth = " + response.getPlayAuth() + "\n");
//VideoMeta信息
System.out.print("VideoMeta.Title = " + response.getVideoMeta().getTitle() + "\n");
} catch (Exception e) {
System.out.print("ErrorMessage = " + e.getLocalizedMessage());
}
System.out.print("RequestId = " + response.getRequestId() + "\n");
return response.getPlayAuth();
}
四、短信服务
获取短信 获取成功则需要存入redis, 后期便于校验
//获取短信 获取成功则需要存入redis, 后期便于校验.
public R getCode(@PathVariable String mobile) throws ClientException {
//校验手机号是否合法
if(StringUtils.isEmpty(mobile) || !FormUtils.isMobile(mobile)){
return R.setResult(ResultCodeEnum.LOGIN_PHONE_ERROR);
}
//生成4位验证码
String checkCode = RandomUtils.getFourBitRandom();
//发送验证码
smsService.send(mobile, checkCode);
//将验证码存入redis缓存
String key = "checkCode::" + mobile;
redisTemplate.opsForValue().set(key, checkCode, 5, TimeUnit.MINUTES);
return R.ok().message("短信发送成功");
}
public void send(String mobile, String fourBitRandom) {
//获取阿里云短信服务的用户信息,调用前需要获取功能的授权
String keyId = smsProperties.getKeyId();
String keySecret = smsProperties.getKeySecret();
String regionId = smsProperties.getRegionId();
String signName = smsProperties.getSignName();
String templateCode = smsProperties.getTemplateCode();
//组装请求参数
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", keyId, keySecret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
//部分参数为固定, 不需要修改
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("RegionId", regionId);
request.putQueryParameter("PhoneNumbers", mobile);
request.putQueryParameter("SignName", signName);
request.putQueryParameter("TemplateCode", templateCode);
try {
HashMap<String, Object> map = new HashMap<>();
map.put("code",fourBitRandom);
Gson gson = new Gson();
//以k : v 的形式 存入生成的随机数
request.putQueryParameter("TemplateParam",gson.toJson(map));
CommonResponse response = client.getCommonResponse(request);
String data = response.getData();
HashMap<String,String> hashMap = gson.fromJson(data, HashMap.class);
//解析json字符串格式的响应结果
/**获取的data 格式如下
* {
* "Message": "模板不合法(不存在或被拉黑)",
* "RequestId": "3D5DB61D-6FF4-4907-B94E-E16D248C02BE",
* "Code": "isv.SMS_TEMPLATE_ILLEGAL"
* }
*/
String code = hashMap.get("Code");
String message = hashMap.get("Message");
//解析响应的message, 如果为异常信息,则验证码获取失败,且抛出异常
// 抛出异常时, 可以不用写return
if ("isv.BUSINESS_LIMIT_CONTROL".equals(code)) {
log.error("短信发送过于频繁 " + "【code】" + code + ", 【message】" + message);
throw new GuliException(ResultCodeEnum.SMS_SEND_ERROR_BUSINESS_LIMIT_CONTROL);
}
if (!"OK".equals(code)) {
log.error("短信发送失败 " + " - code: " + code + ", message: " + message);
throw new GuliException(ResultCodeEnum.SMS_SEND_ERROR);
}
System.out.println(response.getData());
} catch (Exception e) {
e.printStackTrace();
threw new GuliException(ResultCodeEnum.xxxxxx);
}
}
五、总结
此处为示例,后期cv修改方便简单。