分布式集群上传文件到阿里云存储-OSS

前两天一个小伙伴问到分布式集群中,比如订单服务搞成集群,我每次都被负载均衡到不同的服务器,那么我上传的文件怎么搞?怎么统一管理的,我这里就教给大家一种简单的方法,统一存储在阿里云服务器的对象存储OSS中。

oss是什么我就不讲了,百度一搜一大堆。

今天分两步讲下:

第一步讲下OSS云存储开通与使用。

首先登陆阿里云,首页里面选择 存储与网络里面的对象存储OSS.

然后点击 立即开通。

下一步

右上角头像点击、实名认证

个人实名认证

支付宝 扫码登录。

随便填写地址:

到此 实名认证完成,然后回去继续开通OSS。

开通完成,接下来说下怎么使用。

首先 点击左上角的菜单,然后点击对象存储OSS

这是一些专业术语

解释一下:

Bucket就是指我们的文件上传到哪里,哪个桶,一般是一个项目一个桶,一会我们需要创建。

Object:就是我们要上传的文件
地域:我们创建桶需要选择的地址,区域。

Endpoint:我们的桶里面的文件最终是通过这个endpoint访问的。

AccessKey:这个很重要,我们要上传东西到我们的桶里面,需要账号密码,就是这个东东。

好了,那我们就创建一个桶:

填写信息:

创建成功之后,我们看看我们的桶:

我们现在可以上传一个文件到我们的桶里面:

点击详情,复制链接,就可以访问了。

浏览器访问我们复制的地址:

下载下来了,ok。

到此为止,我们的oss就准备就绪了,那我们怎么用java操作,往我们的桶里面上传文件呢?下面就来看第二部分。

第二步 Java操作OSS上传文件

sdk文档在阿里云里面就有,我就摘出来借花献佛。

在 Maven 工程中使用 OSS Java SDK,只需在 pom.xml 中加入相应依赖即可。以 3.8.0 版本为例,在 <dependencies> 内加入如下内容: 

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.8.0</version>
</dependency>

可以上传字符串 上传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

<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alicloud-oss</artifactId>
			<version>2.2.0.RELEASE</version>
		</dependency>

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,暂 至此。其实这样 前端请求还是访问了我们的服务器,之后才调用阿里云。还是给我们的服务增加了压力,后面还会抽时间写一篇直接不经过我们的服务器,通过服务器返回的认证直接访问阿里云的文章。

猜你喜欢

转载自blog.csdn.net/cyberHerman/article/details/106299091