阿里云OSS实践篇
我们知道一般的热点数据我们直接存到数据库,但是类似一些表格模板,附件等静态资源放在哪里呢?
- 数据库
- 数据库 + 本地文件(IO流)
- 数据库 + 缓存 + 文件服务器(Hdfs 、fastDFS、服务器集群)
- 数据库 + 缓存 + 文件存储(对象存储服务OSS)
因为阿里云提供了各种常用语言的SDK,所以进行文件的存储就变得十分简单,那本文就来介绍下阿里云的对象存储OSS使用。
开通OSS服务
搜索后,购买直接就可以使用,它是按流量计算费用的,话说我们买个10块钱的足够我们基本的学习使用了,不够了再充值嘛!我这里因为用的就是阿里云服务器,所以好像是赠送了40G的存储,具体也懒的去了解,反正没要我再交钱就是。
了解阿里云OSS
通过了解它的官方文档,我们基本可以知道阿里云OSS提供了面向各种常用语言的SDk,通过这些SDK我们基本可以知道如何使用了。
点击JAVA SDK快速入门
我们可以看到对应的maven 工程示例;这里自己点进去了解即可!
题外话: 后面对于其他东西的学习,个人建议都是先找官方文档了解,至于本篇博客个人也只是做个笔记,记录下简单的使用,肯定不如官网的全面。
快速上手
1.创建Bucket
如果你听了我的建议,了解过JAVA SDk 中的工程例子,我想你应该知道要使用OSS 需要4个参数:
- endpoint
- AccessKeyID
- AccessKeySecret
- bucketName
这里我们先记录下 bucketName: oss-study01
;endpoint:oss-cn-beijing.aliyuncs.com
2.创建文件夹
创建一个存放图片的文件夹images
3.上传一张图片测试
注意:是点击进此文件后再上传
这里我们选择单个文件的权限是公共读,当然你也可以通过修改整个文件的权限,目前此文件夹我们没修改就是默认的私有的!
4.访问控制
添加用户组-->创建用户-->添加用户到用户组-->分配用户组权限-->保存账号信息
其实就像我们的系统的权限,角色和用户的关系,某些用户是某些角色,某些角色就具有某些分配好的权限!
具体步骤截图如下:
记录下
AccessKeyID: LTAI4FoYHgbk2y3woYH191Ys
AccessKeySecret:FVZzvz4G9e39ako5vVMASYryrbpnJu
测试SDK
1.创建微服务,引入阿里OSS依赖
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.8.0</version> </dependency>
2. 测试
package com.coding.aliyunoss; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.CannedAccessControlList; import com.aliyun.oss.model.GetObjectRequest; import com.aliyun.oss.model.OSSObjectSummary; import com.aliyun.oss.model.ObjectListing; import org.junit.Test; import java.io.File; public class OSSTest { String endpoint = "oss-cn-beijing.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。 // 强烈建议您创建并使用RAM账号进行API访问或日常运维, // 请登录 https://ram.console.aliyun.com 创建RAM账号。 String accessKeyId = "LTAI4FoYHgbk2y3woYH191Ys"; String accessKeySecret = "FVZzvz4G9e39ako5vVMASYryrbpnJu"; String bucketName = "oss-study01"; // 判断是否 bucketName,如果不存在就创建,修改权限 // 创建oss 实例 @Test public void testCreate(){ // 对象 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 方法 ossClient.createBucket(bucketName); // 关闭对象 ossClient.shutdown(); } // 判断当前实例是否存在 @Test public void testExist(){ // 对象 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 方法 boolean exist = ossClient.doesBucketExist(bucketName); System.out.println(exist); // 关闭对象 ossClient.shutdown(); } // 修改权限 公共读 @Test public void testUpdate(){ // 对象 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 方法 (修改已经有的,创建新的) ossClient.setBucketAcl(bucketName,CannedAccessControlList.PublicRead); // 关闭对象 ossClient.shutdown(); } // 上传文件 // 上传文件流。 @Test public void testFileUpload(){ // 对象 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 方法 (修改已经有的,创建新的) // 上传到 oss 后需要一个文件名(保证唯一 /2020/4/1/xxxxxxxx.jpg)! String objectName = "images/default.jpg"; ossClient.putObject(bucketName, objectName, new File("C:\\Users\\Administrator\\Desktop\\dafault.jpg")); // 关闭对象 ossClient.shutdown(); } // 下载文件 @Test public void testDownload(){ // 对象 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 方法 (修改已经有的,创建新的) String objectName = "images/default.jpg"; ossClient.getObject(new GetObjectRequest(bucketName,objectName),new File("a.jpg")); // 关闭对象 ossClient.shutdown(); } // 查看文件列表 @Test public void testShowList(){ // 对象 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 方法 (修改已经有的,创建新的) // ossClient.listObjects返回ObjectListing实例,包含此次listObject请求的返回结果。 ObjectListing objectListing = ossClient.listObjects(bucketName); // objectListing.getObjectSummaries获取所有文件的描述信息。 for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) { System.out.println(" - " + objectSummary.getKey() + " " +"(size = " + objectSummary.getSize() + ")"); } // 关闭对象 ossClient.shutdown(); } // 删除文件 @Test public void testDeleted(){ // 对象 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 方法 (修改已经有的,创建新的) String objectName = "images/default.jpg"; ossClient.deleteObject(bucketName,objectName); // 关闭对象 ossClient.shutdown(); } }
后面我们就可以用接口调用,完成我们文件的上传和下载了。是不是很简单?赶快去试试吧;当然这只是测试代码,别忘了参数啥的应该弄成可配置的还有对象等的关闭都应该放在finally中哈;好,就先酱紫吧!