基于springboot+阿里云存储对象OSS详解

  1. 先在阿里云AccessKey 管理中获取用户的AccessKey ID和AccessKey Secret
  2. 创建Bucket空间
  3. 安装阿里云对象存储oss依赖包
             <!--阿里云oss-->
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>3.10.2</version>
            </dependency>

  4. 在application.yml配置文件中配置参数(我使用的是.yml文件格式)
  5. 在ConstantPropertiesUtil中获取配置文件参数
    package 包路径;
    
    
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.stereotype.Component;
    
    
    /**
     * 阿里云对象存储信息
     */
    @Component
    @PropertySource("classpath:application.yml")
    public class ConstantPropertiesUtil implements InitializingBean {
      @Value("${aliyun.oss.file.endpoint}")
      private String endpoint;
      @Value("${aliyun.oss.file.keyid}")
      private String keyId;
      @Value("${aliyun.oss.file.keysecret}")
      private String keysecret;
      @Value("${aliyun.oss.file.bucketname}")
      private String bucketname;
    
      //定义公开静态常量
      public static String END_POIND;
      public static String ACCESS_KEY_ID;
      public static String ACCESS_KEY_SECRET;
      public static String BUCKET_NAME;
    
      @Override
      public void afterPropertiesSet() throws Exception {
        END_POIND = endpoint;
        ACCESS_KEY_ID = keyId;
        ACCESS_KEY_SECRET = keysecret;
        BUCKET_NAME = bucketname;
      }
    }
    

  6. 创建相应的service接口和实现类
    package 包路径;
    
    import org.springframework.web.multipart.MultipartFile;
    
    public interface OssService {
      //上传头像图片到oss
      String uploadFileAvatar(MultipartFile file);
    }

     实现类:

    package 包路径;
    
    import com.rwlok.service.OssService;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    
    import com.rwlok.utils.ConstantPropertiesUtil;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.InputStream;
    import java.util.UUID;
    
    @Service
    public class OssServiceImpl implements OssService {
    
    
      //上传头像
      @Override
      public String uploadFileAvatar(MultipartFile file) {
      // 工具类获取值
        String endpoint = ConstantPropertiesUtil.END_POIND;
        String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtil.BUCKET_NAME;
        String catalogue = "avatar";//目录
        try {
          // 创建OSS实例。
          OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);
    
          //获取上传文件输入流
          InputStream inputStream = file.getInputStream();
          //获取文件名称
          String fileName = file.getOriginalFilename();
    
          //1 在文件名称里面添加随机唯一的值
          String uuid = UUID.randomUUID().toString().replaceAll("-","");
          // yuy76t5rew01.jpg
          fileName = uuid+fileName;
    
          //拼接
          //  2019/11/12/ewtqr313401.jpg
          fileName = catalogue+"/"+fileName;
    
          //调用oss方法实现上传
          //第一个参数  Bucket名称
          //第二个参数  上传到oss文件路径和文件名称   aa/bb/1.jpg
          //第三个参数  上传文件输入流
          ossClient.putObject(bucketName,fileName , inputStream);
    
          // 关闭OSSClient。
          ossClient.shutdown();
    
          //把上传之后文件路径返回
          //需要把上传到阿里云oss路径手动拼接出来
          //  https://edu-guli-1010.oss-cn-beijing.aliyuncs.com/01.jpg
          String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
          return url;
        }catch(Exception e) {
          e.printStackTrace();
          return null;
        }
      }
    
    }
    

  7. 在控制类中调用实现类中的方法
    import com.rwlok.service.OssService;
    import com.rwlok.utils.ErrorCode;
    import com.rwlok.utils.Result;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    @RestController
    @RequestMapping("/uploadfileoss")
    @Api(tags = "上传图片")
    @CrossOrigin
    public class OssController {
    
      @Autowired
      private OssService ossService;
    
      //上传头像的方法
      @PostMapping("/avatar")
      @ApiOperation(value = "上传头像")
      public Result uploadAvatarOssFile(MultipartFile file) {
        //获取上传文件  MultipartFile
        //返回上传到oss的路径
        String url = ossService.uploadFileAvatar(file);
        if (StringUtils.isBlank(url)){
          return Result.error(ErrorCode.UPLOADIND_ERROR.getCode(), ErrorCode.UPLOADIND_ERROR.getMsg());
        }
        return Result.success(url);
      }
    }

  8. 启动项目,查看结果

 

猜你喜欢

转载自blog.csdn.net/weixin_44030860/article/details/122631067