我们知道一般的热点数据我们直接存到数据库,但是类似一些表格模板,附件等静态资源放在哪里呢?
- 数据库
- 数据库 + 本地文件(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中哈;好,就先酱紫吧!