OSS - Object Storage Service - 对象储存
questions:
- 它在项目是处理什么问题的?
- 存储平台运行需要用到的图片视频等文件,主要是图片
- 大概写法是什么?
- 对于团队有什么好处?
- 快捷方便…?
- 有没有其他的替代方案
- 其他的选择就是放在自己的服务器上?
- 不过问题就是不稳定,有安全隐患
- 替代了什么老的技术,解决了老技术的什么问题?(备选)
文件上传
- 项目中采用的文件上传方式是:简单上传 - 文件流上传
- main idea:
- 文件通过 post method 提交到 controller,controller 的接受文件的参数类型是 MultipartFile
- controller 再将文件传递给 service 部分,再完成真正的文件上传动作
- 上传动作所需要的一些固定参数:endpoint, accessKeyId, accessKeySecret, bucketName 等都是作为参数定义在工具类中的,通过调用工具类的属性获得这些常量
- 上传文件的命名
- 在文件名前面加上一段随机数字来避免文件名重复
- 在文件名前面再加上 “yyyy/MM/dd” 的日期来实现文件按日期分类
- 最终的 fileName 为:”yyyy/MM/dd/“ + randomNumber + fileName
- 文件上传
- OSSClientBuilder -> ossClient -> ossClient.putObject() -> ossClient.shutdown()
- OSSClientBuilder().build() 方法创建 ossClient 对象(参数:endpoint, accessKeyId, accessKeySecret)
- ossClient.putObject() 方法将文件上传,ossClient.putObject(bucketName, fileName, inputStream)
- 通过自己拼装获得上传文件的访问路径:
- “https://“ + bucketName + “.” + endpoint + “/“ + fileName
Question:
在项目定义常量对象使用的方法是:将常量定义到 application.yml 中,然后通过 @Value 注解为类中的私有属性赋值该常量,然后再通过 afterPropertiesSet() 方法,在该类的实例被添加到容器时,将私有属性的值赋予给公开属性。在实际工作中也是这样子做的吗?可以用 final & static 关键字来代替?
Date time = new Date() // 此处的 Date() 是属于 java.util 中的类,同时可以通过 application.yml 中的 jackson 配置来设定默认的日期格式,但是在 oss 中似乎是使用其他的日期生成方法
-> new Datetime() // import org.joda.time.DateTime;