前后端分离——使用OSS

时间:2023-01-29 18:10:12

1. 第一步:编写OSS的工具类

点击查看代码
aliyun:
  oss:
    keyid: 填写自己的
    keysecret: 填写自己的
    endpoint: 填写自己的
    bucketname: 填写自己的
@Component
public class OSSUtils {

    public String urlOSS(MultipartFile img){
        //地域节点 --- id --- 密钥 --- 存储筒名称
        String endpoint = AliYunOssClient.END_POINT;
        String accessKeyId = AliYunOssClient.KEY_ID;
        String accessKeySecret = AliYunOssClient.KEY_SECRET;
        String bucketName = AliYunOssClient.BUCKET_NAME;

        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            //获取文件上传的输入流
            InputStream inputStream = img.getInputStream();
            //获取文件名称
            String Filename = img.getOriginalFilename();
            /**
             * 1.解决上传同一文件而被新上传的覆盖,使用uuid进行拼接文件名使文件名唯一
             * 2.解决上传文件分类问题,根据时间进行分类
             */
            // 将uuid 转为string 并且把-去除
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            Filename = uuid + Filename;

            /**
             * 使用的依赖是:
             * <dependency>
             *    <groupId>joda-time</groupId>
             *    <artifactId>joda-time</artifactId>
             *</dependency>
             * new DateTime().toString(),toString()传入日期规则
             * yyyy/MM-dd   形成 年为一个文件夹,月-日为一个文件夹
             */
            org.joda.time.DateTime dateTime = new org.joda.time.DateTime();
            String date = dateTime.toString("yyyy/MM/dd");

            String filePath = date+"/"+Filename;

            /**
             * 第一个参数    bucket名字
             * 第二个参数    上传文件到阿里云OSS的文件路径和文件名称,filePath = path + fileName
             *              eg:/a/b/c.jpg
             * 第三个参数    是文件输入流
             */
            ossClient.putObject(bucketName,filePath,inputStream);

            //关闭ossClient
            ossClient.shutdown();

            String url = "https://"+bucketName+"."+endpoint+"/"+filePath;
            //System.out.println("================="+url);
            return url;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

2. OSS的属性

点击查看代码
@Data
  @Component
  @ConfigurationProperties(prefix = "aliyun.oss")
  public class AliYunOssClient implements InitializingBean {

    private String endPoint;
    private String keyId;
    private String keySecret;
    private String bucketName;

    public static String END_POINT;
    public static String KEY_ID;
    public static String KEY_SECRET;
    public static String BUCKET_NAME;

    //在给上面属性通过配置文件注入值之后,定义static变量,让外界直接用类名.的方式获取属性
    //此方法在上面私有属性被注入值之后,可以执行下面的方法
    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT = endPoint;
        KEY_ID = keyId;
        KEY_SECRET = keySecret;
        BUCKET_NAME = bucketName;
    }
}

3. 上传接口的Controller

点击查看代码
/**
 * @author 胡铭阳
 * @ClassNameUploadController
 * @Authorhmy
 * @date 2023/1/2 10:17
 * @description:文件图片上传
 */
@CrossOrigin
@RestController
public class UploadController {

    @Autowired
    private OSSUtils ossUtils;

    @PostMapping("/upload")
    public ResponseResult uploadImg(MultipartFile img){
        String s = ossUtils.urlOSS(img);
        return ResponseResult.okResult(s);
    }
}

4. service接口

点击查看代码
/**
 * @author 胡铭阳
 * @ClassNameUploadService
 * @Authorhmy
 * @date 2023/1/2 10:19
 * @description:文件图片上传
 */
public interface UploadService {

    /**
     * 图片上传
     * @param img:文件
     * @return
     */
    ResponseResult uploadImg(MultipartFile img);
}

5. Impl实现类

点击查看代码
/**
 * @author 胡铭阳
 * @ClassNameUploadServiceImpl
 * @Authorhmy
 * @date 2023/1/2 10:20
 * @description
 */
@Service
public class UploadServiceImpl implements UploadService {


    @Autowired
    private OSSUtils ossUtils;

    /**
     * 图片上传
     *
     * @param img :文件
     * @return
     */
    @Override
    public ResponseResult uploadImg(MultipartFile img) {

        String originalFilename = img.getOriginalFilename();
        if (originalFilename.equals(".png")||originalFilename.equals(".jpg")||originalFilename.equals(".GIF")||originalFilename.equals(".BMP")){
            throw new SystemException(AppHttpCodeEnum.FILE_TYPE_ERROR);
        }
        String s = ossUtils.urlOSS(img);
        return ResponseResult.okResult(s);
    }

}