Java spring boot 使用阿里OSS实现图片上传,附源码
在实际开发中,有上传文件的需求,除了可以使用上传到本地服务器,也可以选中上传到阿里OSS进行存储,这里将从阿里云控制台创建桶开始进行实现
阿里oss部分
获取key+secret
首页右上角我的-选中“AccessKey”
会有如下弹框,选择继续
选择创建(有上限,有2个key会置灰),拿到key+secret后需要自己保存好,连接OSS是必须要用到的,只显示这一次,丢失无法找回
创建桶
搜索“OSS对象存储”
选择控制台,创建,可以直接创建,或是进入列表再创建
快捷创建输入bucket名,(名称不可重复)
创建好后需要设置下阻止公共访问和读写权限,都打开
Java工具类
数据源
- 这里需要四项数据endpoint、accessKeyId、accessKeySecret、bucketName,可以直接在工具类中编写,为了后续便于修改,可以写在配置文件中
# 名称可以进行自定义aliyun.oss.endpoint=https://oss-cn-beijing.aliyuncs.comaliyun.oss.accessKeyId=aliyun.oss.accessKeySecret=aliyun.oss.bucketName=- 可以将四项数据抽取到一个类中,通过注解实现调用配置文件中的数据
importlombok.Data;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.stereotype.Component;@Component@ConfigurationProperties(prefix="aliyun.oss")@DatapublicclassAliOSSProperties{//直接通过属性去properties文件中匹配值,调用时使用get方法//oss终端地址privateStringendpoint;//key-idprivateStringaccessKeyId;//key-secretprivateStringaccessKeySecret;//创建的桶名privateStringbucketName;}- 工具类
importcom.aliyun.oss.OSS;importcom.aliyun.oss.OSSClientBuilder;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;importorg.springframework.web.multipart.MultipartFile;importjava.io.IOException;importjava.io.InputStream;importjava.util.UUID;//添加容器控制 进行properties读值@ComponentpublicclassOSSUtils{/*@Value("${aliyun.oss.endpoint}") //可以通过@value注解,直接获取到配置文件中的数据 private String endpoint = "";*///通过实体类进行数据的获取,通过get方法@AutowiredprivateAliOSSPropertiesproperties;//将上传的文件,作为参数进行传递publicStringupload(MultipartFilefile)throwsIOException{//获取文件输入流InputStreaminputStream=file.getInputStream();//生成新的文件名,通过uuid避免文件名重复,并拼接源文件的后缀名StringnewFileName=UUID.randomUUID()+file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));//上传图片到客户端,先创建客户端OSSossClient=newOSSClientBuilder().build(properties.getEndpoint(),properties.getAccessKeyId(),properties.getAccessKeySecret());//进行上传ossClient.putObject(properties.getBucketName(),newFileName,inputStream);//生成可以访问上传文件的地址StringBufferstringBuffer=newStringBuffer(properties.getEndpoint());stringBuffer.insert(8,properties.getBucketName()+".").append("/").append(newFileName);ossClient.shutdown();returnstringBuffer.toString();}}工具类创建好后,直接调用使用就可以了,String upload = ossUtils.upload(上传的文件参数名); “upload”是返回的文件可访问地址