阿里云oss

阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。您可以通过本文档提供的简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据。基于OSS,您可以搭建出各种多媒体分享网站、网盘、个人和企业数据备份等基于大规模数据的服务。

购买

这里就不用多说了上链接直接 https://www.aliyun.com/product/oss?spm=5176.19720258.J_2686872250.2.5e052c4aqm9WSD

购买开通 控制台https://oss.console.aliyun.com/overview

配置oss

开通后进入阿里云oss 控制台

 

 

 创建一个Bucket 然后进入AccessKey 创建一个AccessKey 并记录号他的AccessKey ID和secret

 

编写Java代码

1. 导入依赖

<!--阿里云oss-->
<dependency>
   <groupId>com.aliyun.oss</groupId>
   <artifactId>aliyun-sdk-oss</artifactId>
   <version>3.8.0</version>
</dependency>

2.配置(yml)

aliyun:
  oss:
    file:
      keyid:             这里就是Accesskey下的两个值
      keysecret: 
      bucketname:        这里是创建Bucket的名字和外网的地域节点
      endpoint: oss-cn-xxxx.aliyuncs.com

3.编写工具类

@Component
@PropertySource("classpath:application.yml")
public class OssProperies 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_POINT; public static String ACCESS_KEY_ID; public static String ACCESS_KEY_SECRET; public static String BUCKET_NAME; @Override public void afterPropertiesSet() throws Exception { END_POINT = endpoint; ACCESS_KEY_ID = keyId; ACCESS_KEY_SECRET = keysecret; BUCKET_NAME = bucketname; } }

4.Service

public interface OssService {
    String uploadFile (MultipartFile file) throws Exception;
}

5.ServiceImpl

@Service
public class OssServiceImpl implements OssService {
    @Override
    public String uploadFile(MultipartFile file) throws Exception {
        //读取工具类的数据
        String endpoint = OssProperies.END_POINT;
        String accessKeyId = OssProperies.ACCESS_KEY_ID;
        String accessKeySecret = OssProperies.ACCESS_KEY_SECRET;
        String bucketName = OssProperies.BUCKET_NAME;
        //连接oss客户端
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 上传文件流
        InputStream inputStream = file.getInputStream();
        //这里最好对文件路径或名字做一下处理,防止文件名或路径重复导致文件丢失或者被覆盖
        String url ="xxx/xxx/"+file.getOriginalFilename();
        //上传
        ossClient.putObject(bucketName, url, inputStream);
        // 关闭OSSClient。
        ossClient.shutdown();
        return "https://"+bucketName+"."+endpoint+"/"+url;
    }
}

6.文件名路径防止重复的几种方式

    a.日期时间,可以将以下值合理的拼接到路径或者文件名上

      Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int date = c.get(Calendar.DATE);
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);
        int second = c.get(Calendar.SECOND);

  b.通过随机数拼接文件名

UUID.randomUUID().toString()+"_"+fileName;

  其他方法自行摸索,只要你的小脑袋还能动,你一定可以想到更好的方法。

 

版权声明:本文为jydm原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/nmybk/p/14745418.html