在上一篇中:Docker部署Minio并与Springboot的集成_木星mx的博客-CSDN博客
我们介绍了如何部署minio和与springboot的集成方法,但是在上传文件时,采用的是从浏览器获取参数读取本地文件上传,当项目部署到线上时,用户和项目服务处于不同机器上,这种方式就不适用了,因此需要进行升级。
升级后的效果是:项目服务只提供签名服务,用户通过访问项目提供的接口获取签名,然后用户使用签名上传文件,实现了用户到oss端对端的文件传输
2、实践 1、工具准备(1)sts授权工具aws
minio本身不具备sts签名服务,因此需要第三方服务提供,我们选择aws提供的sts授权
服务,因此必须先安装aws应用:
//下载安装包 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64-2.0.30.zip" -o "awscliv2.zip" //解压文件 unzip awscliv2.zip //安装,root用户sudo可以去掉 sudo ./aws/install
(2)minio客户端mc
aws提供的授权服务必须绑定到minio服务上,因此需要一个minio客户端,它可以以命令
的方式操作minio服务
//在当前目录下载mc wget https://dl.min.io/client/mc/release/linux-amd64/mc //设置为可执行 chmod +x mc //在本目录执行mc命令,查看mc提供的操作命令 ./mc --help2、为minio(oss)服务绑定sts授权服务
1、给mc绑定minio服务
要让mc控制minio服务,首先得为mc配置minio服务的地址,需要提供:
minio的ip和端口号,minio的用户名和密码,local表示配置本地服务
./mc config host add local http://127.0.0.1:9000 username password
配置完成之后可以在~/.mc/config.json中查看,local配置好了本地的minio服务
2、使用mc命令为刚刚配置的minio服务绑定访问策略
(1)首先需要创建一个json文件,名字可以随便起,键入以下内容
Version是版本号,Action里是允许使用s3接口的删除、获取上传对象功能
Resource是访问控制,*表示可以访问minio服务的所有bucket,若想限制访问
名为test的bucket可替换成"arn:aws:s3:::test System.out.println(provider.fetch().sessionToken()); System.out.println(provider.fetch().accessKey()); System.out.println(provider.fetch().secretKey()); System.out.println(provider.fetch().isExpired()); //使用签名获取mc对象 MinioClient minioClient = MinioClient.builder() .endpoint(ENDPOINT) .credentialsProvider(provider) .build(); String filename = "任务(1).docx"; try { //对象流,获取文件 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\Users\Administrator\Desktop\" + filename)); //使用mc对象上传文件 minioClient.putObject(PutObjectArgs.builder() //桶名和aws服务端点 .bucket(BUCKET).region(REGION) //前缀和对象名 .object("mx/" + filename) .stream(bis, bis.available(), -1) .build()); System.out.println("文件上传成功!!"); } catch (ErrorResponseException e) { e.printStackTrace(); } catch (InsufficientDataException e) { e.printStackTrace(); } catch (InternalException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (InvalidResponseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ServerException e) { e.printStackTrace(); } catch (XmlParserException e) { e.printStackTrace(); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } }



