数据,文件的存储:
- 数据(MySQL)
- 数据(MySQL)+ 文件(本地:IO流)
- 数据(MySQL)+ 缓存(Redis)+文件(服务器集群上,fastDFS(集群),Hdfs(大数据))
- 数据(MySQL)+ 缓存(Redis)+文件(OSS)
OSS 就是为了解决海量数据存储和弹性扩容,我们就可以采用阿里云OSS。
1、开通服务(免费开通)
2、Bucket 库
- 点击创建Bucket
- 填写Bucket名称及区域
- 注:我这里区域选的是杭州,因为当时买服务器的时候,我是选的杭州区域,赠送的OSS包月资源包,当然也可以按流量计费,个人测试的话几块钱可以搞定。
3、注意:使用子权限——安全
- 点击访问控制
- 创建用户
- 创建用户组
- 用户组权限设置
- 将用户添加到用户组
- 保存账户信息
4、测试API
- 找到官方文档
- 测试
1 package com.coding.aliyun; 2 3 import com.aliyun.oss.OSS; 4 import com.aliyun.oss.OSSClientBuilder; 5 import com.aliyun.oss.model.CannedAccessControlList; 6 import com.aliyun.oss.model.GetObjectRequest; 7 import com.aliyun.oss.model.ObjectMetadata; 8 import org.junit.Test; 9 10 import java.io.*; 11 12 // 详细步骤请参照官方文档,详细步骤请参照官方文档,详细步骤请参照官方文档 13 public class OSSTest { 14 // Endpoint以杭州为例,其它Region请按实际情况填写。 15 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; 16 // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 17 String accessKeyId = "LTAI4Fcy4XxxxxxQR4"; 18 String accessKeySecret = "spI0CUXTDxxxxxxxYsf4lmIaUdrIu"; 19 String bucketName = "vin955"; 20 23 @Test 24 public void testCreate(){ 25 // 创建OSSClient实例。 26 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); 27 28 boolean exists = ossClient.doesBucketExist(bucketName); 29 30 if (exists == false) { //判定是否存在此存储空间 31 // 创建存储空间。 32 ossClient.createBucket(bucketName); 33 } 34 35 // 设置存储空间的访问权限为私有。 36 ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); 37 38 // 关闭OSSClient。 39 ossClient.shutdown(); 40 } 41 42 @Test 43 public void testCreate2(){ 44 // 创建OSSClient实例。 45 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); 46 47 // 上传文件流。 48 InputStream inputStream = null; 49 try { 50 inputStream = new FileInputStream("C:\Users\heng\Desktop\ava.png"); 51 } catch (FileNotFoundException e) { 52 e.printStackTrace(); 53 } 54 55 ossClient.putObject(bucketName, "ava/aaa.png", inputStream); 56 57 // 关闭OSSClient。 58 ossClient.shutdown(); 59 } 60 63 @Test 64 public void testCreate3() throws IOException { 65 // 创建OSSClient实例。 66 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); 67 68 String objectName = "ava/aaa.png"; 69 70 // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。 71 // OSSObject ossObject = ossClient.getObject(bucketName, objectName); 72 ObjectMetadata ossObject = ossClient.getObject(new GetObjectRequest(bucketName, objectName),new File("a.png")); 73 74 75 // 关闭OSSClient。 76 ossClient.shutdown(); 77 } 78 79 80 @Test 81 public void testCreate4() throws IOException { 82 // 创建OSSClient实例。 83 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); 84 85 86 String objectName = "ava/aaa.png"; 87 // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。 88 ossClient.deleteObject(bucketName, objectName); 89 90 ossClient.shutdown(); 91 } 92 93 }