2021-4-3 OSS文件上传管理 (谷粒在线教育项目)

对象存储 OSS

用官方的话来说
对象存储 OSS
海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性。使用RESTful API 可以在互联网任何位置存储和访问,容量和处理能力弹性扩展,多种存储类型供选择全面优化存储成本。


特点:安全 成本低 高可靠 文件存放不丢失
正是有这些特点 现在的企业的文件的存储用的就是这个 OSS存储

1.创建一个OSS

1.阿里云OSS的服务开通

首先阿里云官网
https://www.aliyun.com/
然后点击产品
找到存储 打开对象存储OSS
在这里插入图片描述

2. 阿里云OSS的仓库创建

点击管理控制台
在这里插入图片描述
点击Bucket 列表 创建Bucket
在这里插入图片描述
名字命名不能使用中文
存储类型 选择低频访问存储 (主要是因为项目是用于个人开发提升 所有没有什么用户量)
读写权限 选择公共读 这样就可以直接访问到文件

在这里插入图片描述
在这里插入图片描述

几个重要数据

2.OSS文件上传 java配置(spring boot)

1.配置pom.xml 依赖

	<!--        OSS 依赖-->
	<dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.1.0</version>
    </dependency>

2.配置OSS需要的几个参数

参数
ednpoint 本项目需要外网访问所以使用的是外网的endpoint 节点
在这里插入图片描述accessKeyId 点击右上角头像
打开AccessKey管理 显示 accessKeyId
第一次打开是没有的可以点击创建即可
在这里插入图片描述
在这里插入图片描述

accessKeySecret 就是上面id所对的密钥 点击查看select 即可查看
bucketName 为之前所创建仓库名称

3.代码编写

1.在application.properties 中放入oss需要的参数

提醒不要在参数前后加入空格*

在这里插入图片描述

2.编写一个常量类 用于管理封装这三个参数

需要加上@Component 注解把该类加入到bean 才会执行afterPropertiesSet() 方法

@Component
public class ConstantPropertiesUtils 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 {
    //afterPropertiesSet方法,初始化bean的时候执行,可以针对某个具体的bean进行配置。
    // afterPropertiesSet 必须实现 InitializingBean接口。
    // 实现 InitializingBean接口必须实现afterPropertiesSet方法。
    System.out.println(keyId+"."+keySecret+"."+endpoint);
    END_POIND = endpoint;
    ACCESS_KEY_ID = keyId;
    ACCESS_KEY_SECRET = keySecret;
    BUCKET_NAME = bucketName;
}
}

3.文件上传以及管理

采用文件流的方式上传
首先先创建一个 OSS 实例
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
获取文件输入流
inputStream = file.getInputStream();

这里使用日期分类进行文件管理 把文件按天进行管理
// 以日期进行分类
// 把日期格式转为 2021/4/3 这种形式
String datepath = new DateTime().toString(“yyyy/MM/dd”);

这里需要导入一个依赖

    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>${jodatime.version}</version>
    </dependency>

这个是日期时间工具

处理文件重名的方案有很多
这里的方案是在文件名前面加上uuid随机数
String uuid = UUID.randomUUID().toString().replaceAll("-","");

最后进行上传
ossClient.putObject(bucket, filename, inputStream);
bucket 仓库地址 filename 文件名 文件输入流 inputStream

关闭OSS 实例
ossClient.shutdown();

	@Override
public String uploadFileAvatar(MultipartFile file) {
    //上传
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    String endpoint = ConstantPropertiesUtils.END_POIND;
    // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
    String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
    String bucket = ConstantPropertiesUtils.BUCKET_NAME;
		
    System.out.println(accessKeyId+"."+accessKeySecret+"."+endpoint);
    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);


    // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
 //        InputStream inputStream = new FileInputStream("D:\\localpath\\examplefile.txt");
    // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
    InputStream inputStream = null;
    String url = "";
    try {
        // 选择
        inputStream = file.getInputStream();
        // 以日期进行分类
        String datepath = new DateTime().toString("yyyy/MM/dd");
        // 文件名 前面加上随机数 可以让相同的文件不一样
        String uuid = UUID.randomUUID().toString().replaceAll("-","");
        String filename = datepath+"/"+uuid+file.getOriginalFilename(); //上传文件名

        ossClient.putObject(bucket, filename, inputStream);


        // 关闭OSSClient。
        ossClient.shutdown();
        url="https://"+bucket+"."+endpoint+"/"+filename;

    } catch (IOException e) {
        e.printStackTrace();
    }



    return url;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值