前两天一个小伙伴问到分布式集群中,比如订单服务搞成集群,我每次都被负载均衡到不同的服务器,那么我上传的文件怎么搞?怎么统一管理的,我这里就教给大家一种简单的方法,统一存储在阿里云服务器的对象存储OSS中。
oss是什么我就不讲了,百度一搜一大堆。
今天分两步讲下:
首先登陆阿里云,首页里面选择 存储与网络里面的对象存储OSS.
然后点击 立即开通。
下一步
右上角头像点击、实名认证
个人实名认证
支付宝 扫码登录。
随便填写地址:
到此 实名认证完成,然后回去继续开通OSS。
开通完成,接下来说下怎么使用。
首先 点击左上角的菜单,然后点击对象存储OSS
这是一些专业术语
解释一下:
Bucket就是指我们的文件上传到哪里,哪个桶,一般是一个项目一个桶,一会我们需要创建。
Object:就是我们要上传的文件
地域:我们创建桶需要选择的地址,区域。
Endpoint:我们的桶里面的文件最终是通过这个endpoint访问的。
AccessKey:这个很重要,我们要上传东西到我们的桶里面,需要账号密码,就是这个东东。
好了,那我们就创建一个桶:
填写信息:
创建成功之后,我们看看我们的桶:
我们现在可以上传一个文件到我们的桶里面:
点击详情,复制链接,就可以访问了。
浏览器访问我们复制的地址:
下载下来了,ok。
到此为止,我们的oss就准备就绪了,那我们怎么用java操作,往我们的桶里面上传文件呢?下面就来看第二部分。
sdk文档在阿里云里面就有,我就摘出来借花献佛。
在 Maven 工程中使用 OSS Java SDK,只需在 pom.xml 中加入相应依赖即可。以 3.8.0 版本为例,在
com.aliyun.oss
aliyun-sdk-oss
3.8.0
可以上传字符串 上传Byte数组 上传网络流 上传文件流
我就拿上传文件流写个demo。
import java.io.FileInputStream;
import java.io.InputStream;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
public class OOSDemo {
public static void main(String[] args) throws Exception{
// Endpoint以成都为例,我选的成都,其它Region请按实际情况填写。
String endpoint = "oss-cn-chengdu.aliyuncs.com";
// 下面这两个非常重要,一会来解释一下怎么来的。
String accessKeyId = "**************";
String accessKeySecret = "***************";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件流。
InputStream inputStream = new FileInputStream("D:\\test01.jpg");
/**
* 第一个参数是 你的桶的名称
* 第二个参数是 你上传文件的名称
*/
ossClient.putObject("herman-hello", "test01", inputStream);
// 关闭OSSClient。
ossClient.shutdown();
System.out.println("上传成功");
}
}
这里讲下accessKeyId和 accessKeySecret 怎么来的。
阿里云不可能让你使用 支付宝账户来写在代码里面,太不安全,所以就搞了个子账户,如下操作获取此处两个东西。
下面就创建成功了,生成了我打马赛克这里的两个东东,就是你需要放在代码里的东东。
需要先添加权限:
我选择这个Full权限就够了
最终,上传成功,如图:
这么写 是不是感觉有点复杂,其实 spring cloud alibaba里面有现成的starter,我们从github撸下来看看:
1.直接加入pom
com.alibaba.cloud
spring-cloud-starter-alicloud-oss
2.2.0.RELEASE
2. application.properties加入如下配置:
spring.cloud.alicloud.access-key=********** 这里就是你代码里面的key
spring.cloud.alicloud.secret-key=*************** 这里就是你代码里面的key
spring.cloud.alicloud.endpoint=oss-cn-chengdu.aliyuncs.com
3.直接@Autowired注入 OSSClient使用即可。我这里是main方法,需要静态注入OSSClient ossClient。
public static void main(String[] args) throws Exception{
// 上传文件流。
InputStream inputStream = new FileInputStream("D:\\test02.jpg");
/**
* 第一个参数是 你的桶的名称
* 第二个参数是 你上传文件的名称
*/
ossClient.putObject("herman-hello", "test02", inputStream);
// 关闭OSSClient。
ossClient.shutdown();
System.out.println("上传成功");
}
ok,暂 至此。其实这样 前端请求还是访问了我们的服务器,之后才调用阿里云。还是给我们的服务增加了压力,后面还会抽时间写一篇直接不经过我们的服务器,通过服务器返回的认证直接访问阿里云的文章。