一、关于阿里云对象存储OSS
阿里云对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。其数据设计持久性不低于99.9999999999%(12个9),服务可用性(或业务连续性)不低于99.995%。
OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
您可以使用阿里云提供的API、SDK接口或者OSS迁移工具轻松地将海量数据移入或移出阿里云OSS。数据存储到阿里云OSS以后,您可以选择标准存储(Standard)作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问存储(Infrequent Access)、归档存储(Archive)、冷归档存储(Cold Archive)作为不经常访问数据的存储方式。
二,快速入门
访问链接:点击这里哦!
三,图形化使用OSS
登入你的阿里云,并开通OSS存储服务
3.1 进入你的OSS
3.2 点击Bucket列表
3.3 创建成功
3.4 上传文件
四、使用RAM子用户代码访问
每个人的都不一样
用户登录名称 quick-dine-oss-files@1036300182841973.onaliyun.com AccessKey ID LTAI4GDe9cNNSW1CyzSaDKEr AccessKey Secret FNnU1YTfzaE72CFTTwBK7bcwrHl84U
五、OSS文件管理实现
这里先不做服务拆分,因为先实现功能后做项目优化,而且我这是一个小的课设,能省那些高大上的东西就省略掉,但功能实现绝对是不会次的
5.1 配置文件自定义属性值
每个人的值都不一样,按对呀的名称填入哦!
aliyun: oss: endpoint: oss-cn-beijing.aliyuncs.com keyid: LTAI4GFkxZbNBJS98q8AoLyC keysecret: RPPjRwQ42KlpGpsGHHf8EYMVnl6t2R #bucket可以在控制台创建,也可以使用java代码创建,注意先测试bucket是否已被占用 bucketname: quick-dine-oss-file
创建对应的属性类,进行映射
类名:OssProperties
/** * @Package: cn.liuliang.quickdinesysstore.utils * @Author: liuliang * @CreateTime: 2020/10/26 - 9:09 * @Description: */ @Data @Component @ConfigurationProperties(prefix = "aliyun.oss") public class OssProperties { private String endpoint; private String keyid; private String keysecret; private String bucketname; }
5.2 创建控制器
名称:OSSFileController
/** * @Package: cn.liuliang.quickdinesysstore.controller * @Author: liuliang * @CreateTime: 2020/10/26 - 9:11 * @Description: */ @Api(value = "OSS文件上传管理", tags = "OSS文件上传管理") @RestController @RequestMapping("/oss/file") public class OSSFileController { @Autowired private OSSFileService ossFileService; @ApiOperation("文件上传") @PostMapping("/upload") public ResultDTO upload( @ApiParam(value = "文件对象", required = true) @RequestParam("file") MultipartFile file, @ApiParam(value = "文件上传的模块名称(目录名称)", required = true) @RequestParam("module") String module) { String uploadUrl = ""; InputStream inputStream = null; try { inputStream = file.getInputStream(); } catch (IOException e) { e.printStackTrace(); } uploadUrl = ossFileService.upload(inputStream, module, file.getOriginalFilename()); return ResultDTO.success().message("上传成功!").data("url", uploadUrl); } @ApiOperation("文件删除") @GetMapping("/remove") public ResultDTO removeFile( @ApiParam(value = "要删除的文件路径", required = true) @RequestParam String url) { ossFileService.removeFile(url); return ResultDTO.success().message("文件刪除成功"); } }
5.3 创建业务层
类名:OSSFileService,OSSFileServiceImpl
/** * @Package: cn.liuliang.quickdinesysstore.service * @Author: liuliang * @CreateTime: 2020/10/26 - 9:27 * @Description: 文件上传业务接口 */ public interface OSSFileService { /** * 文件上传 * @param inputStream 文件输入流 * @param module 文件要存储的目录名称 * @param originalFilename 文件名称 * @return */ String upload(InputStream inputStream, String module, String originalFilename); /** * 文件删除 * @param url 要删除的文件访问地址 */ void removeFile(String url); }
/** * @Package: cn.liuliang.quickdinesysstore.service.impl * @Author: liuliang * @CreateTime: 2020/10/26 - 9:28 * @Description: 文件上传业务接口实现类 */ @Service public class OSSFileServiceImpl implements OSSFileService { @Autowired private OssProperties ossProperties; @Override public String upload(InputStream inputStream, String module, String originalFilename) { //获取oss服务器相关属性值 String endpoint = ossProperties.getEndpoint(); String keyid = ossProperties.getKeyid(); String keysecret = ossProperties.getKeysecret(); String bucketname = ossProperties.getBucketname(); //判断oss实例是否存在:如果不存在则创建,如果存在则获取 OSS ossClient = new OSSClientBuilder().build(endpoint, keyid, keysecret); if (!ossClient.doesBucketExist(bucketname)) { //创建bucket ossClient.createBucket(bucketname); //设置oss实例的访问权限:公共读 ossClient.setBucketAcl(bucketname, CannedAccessControlList.PublicRead); } //构建文件路径 //构建日期路径:avatar/2019/02/26/文件名 String folder = new DateTime().toString("yyyy/MM/dd"); //文件名:uuid.扩展名 String fileName = UUID.randomUUID().toString(); String fileExtension = originalFilename.substring(originalFilename.lastIndexOf(".")); String key = module + "/" + folder + "/" + fileName + fileExtension; //文件上传至阿里云 ossClient.putObject(bucketname, key, inputStream); // 关闭OSSClient。 ossClient.shutdown(); //返回url地址 return "https://" + bucketname + "." + endpoint + "/" + key; } @Override public void removeFile(String url) { //获取oss服务器相关属性值 String endpoint = ossProperties.getEndpoint(); String keyid = ossProperties.getKeyid(); String keysecret = ossProperties.getKeysecret(); String bucketname = ossProperties.getBucketname(); //创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, keyid, keysecret); String host = "https://" + bucketname + "." + endpoint + "/"; String objectName = url.substring(host.length()); // 删除文件。 ossClient.deleteObject(bucketname, objectName); // 关闭OSSClient。 ossClient.shutdown(); } }
5.4 包结构
5.5 测试
5.5.1 上传
5.5.2 删除
登录阿里云看看效果:
结束语
- 由于博主才疏学浅,难免会有纰漏,假如你发现了错误或偏见的地方,还望留言给我指出来,我会对其加以修正。
- 如果你觉得文章还不错,你的转发、分享、点赞、留言就是对我最大的鼓励。
- 感谢您的阅读,十分欢迎并感谢您的关注。