SpringBoot 集成阿里云(对象存储OSS、短信)
SpringBoot 集成阿里云对象存储OSS一.从阿里云上获取所需的资料1.API密钥AccessKey ID、密钥AccessKey Secret2.BucketName、Endpoint(地域节点)二. 导入依赖三. 创建工具类短信一. 从阿里云上获取所需要的资料1.API密钥AccessKey ID、密钥AccessKey Secret2.短信签名名称、短信模板ID二. 导入最新的依赖三.
·
SpringBoot 集成阿里云
对象存储OSS
一.从阿里云上获取所需的资料
1.API密钥AccessKey ID、密钥AccessKey Secret
2.BucketName、Endpoint(地域节点)
BucketName
Endpoint(地域节点)、Bucket 域名
二. 导入依赖
<!-- https://mvnrepository.com/artifact/com.aliyun.oss/aliyun-sdk-oss -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.12.0</version>
</dependency>
三. 创建工具类
import cn.hutool.core.io.FastByteArrayOutputStream;
import cn.hutool.core.io.IoUtil;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* 阿里云OSS工具类
*
* @author Lenovo
*/
public class AliyunOSSUtil {
public static final String ACCESS_KEY_ID = "AccessKey ID";
public static final String ACCESS_KEY_SECRET = " AccessKey Secret";
public static final String BUCKET_NAME = "bucke名称";
public static final String END_POINT = "Endpoint(地域节点)";
public static final String url = "https://Bucket 域名/";
private static final String PRI_FIX = "文件目录";
/**
* 超时时间(s)
*/
public static final Long POLICY_EXPIRE = 100L;
/**
* oss 工具客户端
*/
private static OSS ossClient = null;
/**
* 单例模式
* 初始化 oss 客户端
*/
private static OSS initOSS() {
if (ossClient == null) {
synchronized (AliyunOSSUtil.class) {
if (ossClient == null) {
ossClient = new OSSClientBuilder().build(END_POINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
}
}
}
return ossClient;
}
/**
* 文件上传
*
* @param file
* @return
* @throws IOException
*/
public static String upload(MultipartFile file) throws IOException {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DATE);
String objectName = PRI_FIX + "/" + year + "/" + month + "/" + day + "/" + file.getOriginalFilename();
// 创建上传Object的Metadata
ObjectMetadata meta = new ObjectMetadata();
// 获取文件类型
String fileType = file.getContentType();
// 设置上传内容类型
meta.setContentType(fileType);
//被下载时网页的缓存行为
meta.setCacheControl("no-cache");
//创建上传请求
// PutObjectRequest request = new PutObjectRequest(BUCKET_NAME, objectName, file.getInputStream(), meta);
// PutObjectResult putObjectResult = ossClient.putObject(request);
//上传文件
ossClient = initOSS();
ossClient.putObject(BUCKET_NAME, objectName, file.getInputStream(), meta);
return url + objectName;
}
/**
* 根据文件名生成文件的访问地址(带过期时间)
*
* @param fileName
* @return
*/
public static String getOssUrl(String fileName) {
ossClient = initOSS();
// 生成过期时间
long expireEndTime = System.currentTimeMillis() + POLICY_EXPIRE * 1000;
// 生成URL
Date expiration = new Date(expireEndTime);
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(BUCKET_NAME, fileName);
generatePresignedUrlRequest.setExpiration(expiration);
URL url = ossClient.generatePresignedUrl(generatePresignedUrlRequest);
return url.toString();
}
/**
* 通过文件名下载文件
*
* @param fileName 要下载的文件名(OSS服务器上的)
* 例如:4DB049D0604047989183CB68D76E969D.jpg
* @param localFileName 本地要创建的文件名(下载到本地的)
* 例如:C:\Users\Administrator\Desktop\test.jpg
*/
public static void downloadFile(String fileName, String localFileName) {
ossClient = initOSS();
// 下载OSS文件到指定目录。如果指定的本地文件存在会覆盖,不存在则新建。
ossClient.getObject(new GetObjectRequest(BUCKET_NAME, fileName), new File(localFileName));
}
/**
* 通过文件名获取文件流
*
* @param fileName 要下载的文件名(OSS服务器上的)
* 例如:4DB049D0604047989183CB68D76E969D.jpg
*/
public static InputStream getInputStream(String fileName) {
ossClient = initOSS();
// 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
return ossClient.getObject(new GetObjectRequest(BUCKET_NAME, fileName)).getObjectContent();
}
/**
* 通过文件名获取byte[]
*
* @param fileName 要下载的文件名(OSS服务器上的)
* 例如:4DB049D0604047989183CB68D76E969D.jpg
*/
public static byte[] getBytes(String fileName) {
InputStream inputStream = getInputStream(fileName);
FastByteArrayOutputStream fastByteArrayOutputStream = IoUtil.read(inputStream);
return fastByteArrayOutputStream.toByteArray();
}
/**
* 根据文件名删除文件
*
* @param fileName 需要删除的文件名
* @return boolean 是否删除成功
* 例如:4DB049D0604047989183CB68D76E969D.jpg
* 填写文件完整路径。文件完整路径中不能包含Bucket名称。
*/
public static boolean deleteFile(String fileName) {
ossClient = initOSS();
if (BUCKET_NAME == null || fileName == null) {
return false;
}
ossClient.deleteObject(BUCKET_NAME, fileName);
return true;
}
/**
* 列举所有的文件url
*/
public static List<String> urlList() {
ossClient = initOSS();
List<String> list = new ArrayList<>();
// 构造ListObjectsRequest请求
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKET_NAME);
// 列出文件
ObjectListing listing = ossClient.listObjects(listObjectsRequest);
// 遍历所有文件
for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
// 把key全部转化成可以访问的url
String url = AliyunOSSUtil.url + objectSummary.getKey();
list.add(url);
}
return list;
}
}
短信
一. 从阿里云上获取所需要的资料
1.API密钥AccessKey ID、密钥AccessKey Secret
这里获取方式和上面OSS一样,就不多做详细说明了
2.短信签名名称、短信模板ID
签名名称
模板ID
二. 导入最新的依赖
<!-- https://mvnrepository.com/artifact/com.aliyun/dysmsapi20170525 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.4</version>
</dependency>
三. 创建短信工具类
package com.ddz.project.common.utils;
import cn.hutool.core.lang.Assert;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody;
import com.aliyun.teaopenapi.models.Config;
/**
* @Author ddz
* @ClassName AliyunSMSUtils
* @Description 阿里云短信
* @Date 2021/9/11 14:59
* @Version 1.0
**/
public class AliyunSMSUtils {
/**
* 短信API产品域名 (固定的)
*/
public static final String ENDPOINT = "dysmsapi.aliyuncs.com";
public static final String ACCESS_KEY_ID = "AccessKey ID";
public static final String ACCESS_KEY_SECRET = " AccessKey Secret";
/**
* 签名名称
*/
public static final String SIGN_NAME = "签名名称";
/**
* 模板ID
*/
public static final String TEMPLATE_CODE = "模板ID";
private static Client client = null;
/**
* 单例模式 初始化对象
*
* @throws Exception
*/
private static Client initClient() throws Exception {
if (client == null) {
synchronized (AliyunSMSUtils.class) {
if (client == null) {
Config config = new Config()
.setEndpoint(ENDPOINT)
.setAccessKeyId(ACCESS_KEY_ID)
.setAccessKeySecret(ACCESS_KEY_SECRET);
client = new Client(config);
}
}
}
return client;
}
/**
* 发送短信验证码
*
* @param phone
* @param code
*/
public static void sendSms(String phone, String code) throws Exception {
client = initClient();
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers(phone)
.setSignName(SIGN_NAME)
.setTemplateCode(TEMPLATE_CODE)
.setTemplateParam("{\"code\":\"" + code + "\"}");
SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
SendSmsResponseBody body = sendSmsResponse.getBody();
Assert.isTrue("OK".equalsIgnoreCase(body.getCode()), "短信发送失败!");
}
}
更多推荐
所有评论(0)