阿里云OSS对象存储服务学习笔记

一、环境

java 1.8
spring boot 1.5.8
gradle3.2.1

二、OSS使用示例

1. OSS是阿里云提供的对象存储服务,功能非常强大,可以作为文件服务器,还提供了图片的常用操作。相关API文档:https://help.aliyun.com/document_detail/31947.html

2. 使用OSS接口需要添加OSS依赖,在build.gradle中添加依赖如下:

// 添加阿里云OSS服务的依赖
compile group: 'com.aliyun.oss', name: 'aliyun-sdk-oss', version: '2.8.2'

3. 在application.properties配置文件中配置OSS的accessId,accessKey,endpoint,bucket和host(当然,这里也可以直接在具体代码中定义,但建议配置到配置文件中比较方便维护)

#配置阿里云OSS文件服务器
oss.accessId=LTAII5Odxxxxxx
oss.accessKey=5FnVDhDjI1Fxxxxxxx
oss.endpoint=http://oss-cn-shenzhen.aliyuncs.com
oss.rm.bucket=rm
oss.rm.host=http://rm.oss-cn-shenzhen.aliyuncs.com

4. 主要代码:

@Value("${oss.accessId}")	
private String accessId;	//将配置文件的oss.accessId绑定为accessId

@Value("${oss.accessKey}")
private String accessKey;	//将配置文件的oss.accessKey绑定为accessKey

@Value("${oss.endpoint}")
private String endpoint;	//将配置文件的oss.endpoint绑定为endpoint

@Value("${oss.rm.bucket}")	
private String bucket;		//将配置文件的oss.rm.bucket绑定为bucket

@Value("${oss.rm.host}")
private String host;		//将配置文件的oss.rm.host绑定为host

/**
 * 上传到阿里云OSS
 * @param avatarFile
 * @param userId
 * @return
 * @throws IOException
 */
@Override
public Response uploadAvatar(MultipartFile avatarFile, Integer userId) throws IOException {
    if(!avatarFile.isEmpty()){
        String originalFilename = avatarFile.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        if(avatarFile.getSize() > 1 *1024 * 1024){//文件不得大于2M
            logger.error("文件过大!");
            return new Response(false, "文件过大!");
        }
        // 如果文件格式正确
        if(suffix.equalsIgnoreCase(".png") || suffix.equalsIgnoreCase(".jpg")){
            // 创建OSSClient实例
            OSSClient ossClient = new OSSClient(endpoint, accessId, accessKey);
            // 创建ObjectMetadata实例
            ObjectMetadata meta = new ObjectMetadata();
            meta.setContentType("image/" + suffix);
            // 上传文件流
            InputStream inputStream = avatarFile.getInputStream();
            String fileName = "rm-avatar/" + GetIDUtil.createIdByUUID() + suffix;
            ossClient.putObject(bucket, fileName, inputStream);

            // 删除上一个头像文件
            String oldAvatar = this.selectById(userId).getAvatar();
            if(null != oldAvatar && !"".equals(oldAvatar)){
                int index = oldAvatar.lastIndexOf("rm-avatar");
                // 如果不是默认头像则删除
                if(index != -1  && !"/img/default_avatar.png".equals(oldAvatar)){
                    String oldAvatarName = oldAvatar.substring(index);
                    ossClient.deleteObject(bucket, oldAvatarName);
                }
            }
            // 关闭client
            ossClient.shutdown();

            // 返回文件名和、文件路径和上传结果
            String imgPath = host + "/" + fileName;
            return new Response(true, "上传文件成功!", imgPath);
        }else{
            logger.error("文件格式不正确!");
            return new Response(false, "格式不正确!");
        }
    }
    return new Response(true, "文件为空!", null);
}

感谢您的阅读,欢迎参观我的个人网站:小嗨词典【 https://www.happydict.cn】

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值