阿里云oss对象存储实践

阿里云oss对象存储实践

将oss参数写入配置文件

# 服务端口
server.port=8002
# 服务名
spring.application.name=service-oss
# 环境配置:dev、test、prod
spring.profiles.active=dev
# 阿里云oss,用于常量类读取
aliyun.oss.file.endpoint=oss-cn-hangzhou.aliyuncs.com
aliyun.oss.file.keyid=LTAI4GFWvpBwFzgAB93QnxZC
aliyun.oss.file.keysecret=4swIof0VAtGcHa93fFE9hKGvK6Wf9p
aliyun.oss.file.bucketname=czs-edu

创建工具类

// 当项目已启动,spring加载之后,执行接口一个方法
@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_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;
    }
}

简单文件上传示例

// service层
public String uploadFileAvatar(MultipartFile file) {
        String endpoint = ConstantPropertiesUtils.END_POINT;
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        try {
            // 上传文件流。
            InputStream inputStream = file.getInputStream();
            // 获取文件名称
            String filename = file.getOriginalFilename();
            //第一个参数:Bucket名称
            //第二个参数:上传到oss文件路径和文件名称 如 /aa/bb/1.jpg
            //第三个参数:上传文件输入流
            ossClient.putObject(bucketName, filename, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();
            //  把文件上传到阿里云路径手动返回
            // 需要把上传到阿里云oss路径手动拼接出来
            String url = "https://" + bucketName + "." + endpoint + "/" + filename;
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

// controller层
    @Autowired
    private OssService ossService;

    //上传文件的方法
    @PostMapping
    public R uploadOssFile(MultipartFile file) {
        // 获取上传文件 MultipartFile
        // 返回上传到oss的路径
        String url = ossService.uploadFileAvatar(file);
        return R.ok().data("url", url);
    }
  • MultipartFile:获取文件类
  • 多次上传相同名称文件,最后一次上传把之前文件覆盖,因此需要将文件名添加随机唯一值,让每个文件名称不同
  • 对文件进行分类’
    1. 根据日期进行分类
    2. 把文件按照日期进行分类

文件上传完善,文件名唯一、按日期分类

// 上传文件流。
InputStream inputStream = file.getInputStream();
// 获取文件名称
String filename = file.getOriginalFilename();

// 1. 在文件名称里面添加随机唯一值
//uuid:qwer-43u5 去掉中间-
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
//qwer-43u5jpg
filename = uuid + filename;

 // 2. 把文件按照日期进行分类
// 2020/2/2/02.jpg
// 获取当前日期 需要依赖joda-time
String datePath = new DateTime().toString("yyyy/MM/dd");
filename = datePath + "/" + filename;

ossClient.putObject(bucketName, filename, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//  把文件上传到阿里云路径手动返回
// 需要把上传到阿里云oss路径手动拼接出来
String url = "https://" + bucketName + "." + endpoint + "/" + filename;
return url;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容