对象存储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()), "短信发送失败!");
    }
}

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐