Detailed Explanation of OSS Based on Springboot+Alibaba Cloud Storage Object

 

  1. First obtain the user's AccessKey ID and AccessKey Secret in Alibaba Cloud AccessKey Management
  2. Create Bucket space
  3. Install Alibaba Cloud Object Storage oss dependency package
             <!--阿里云oss-->
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>3.10.2</version>
            </dependency>

  4. Configure parameters in the application.yml configuration file (I use the .yml file format)
  5. Get configuration file parameters in 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. Create the corresponding service interface and implementation class
    package 包路径;
    
    import org.springframework.web.multipart.MultipartFile;
    
    public interface OssService {
      //上传头像图片到oss
      String uploadFileAvatar(MultipartFile file);
    }

     Implementation class:

    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. Call the method in the implementation class in the control class
    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. Start the project and see the results

 

 

 

 

 

Guess you like

Origin blog.csdn.net/weixin_44030860/article/details/122631067