手机版网站 html5,网站换肤功能 js,吐鲁番网站建设,网站优化的方式有哪些1 MinIO核心概念
下面介绍MinIO中的几个核心概念#xff0c;这些概念在所有的对象存储服务中也都是通用的。 对象#xff08;Object#xff09; 对象是实际的数据单元#xff0c;例如我们上传的一个图片。 存储桶#xff08;Bucket#xff09; 存储桶是用于组织对象的命…1 MinIO核心概念
下面介绍MinIO中的几个核心概念这些概念在所有的对象存储服务中也都是通用的。 对象Object 对象是实际的数据单元例如我们上传的一个图片。 存储桶Bucket 存储桶是用于组织对象的命名空间类似于文件夹。每个存储桶可以包含多个对象。 端点Endpoint 端点是MinIO服务器的网络地址用于访问存储桶和对象例如http://192.168.10.101:9000 注意 9000为MinIO的API的默认端口前边配置的9001以为管理页面端口。 Access Key 和 Secret Key Access Key是用于标识和验证访问者身份的唯一标识符相当于用户名。 Secret Key是与Access Key关联的密码用于验证访问者的身份。
2.上传图片到minio当中去 创建一个Maven项目 引入如下依赖 dependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion8.5.3/version
/dependency 编写如下内容
public class App {public static void main(String[] args) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {//1.创建 MinioClient对象MinioClient minioClient MinioClient.builder().credentials(minioadmin, minioadmin).endpoint(http://192.168.153.128:9000).build();//2.判断指定名称的桶是否存在boolean flag minioClient.bucketExists(BucketExistsArgs.builder().bucket(b002).build());//3.如果不存在则先创建桶并设置策略if (!flag) {//创建桶minioClient.makeBucket(MakeBucketArgs.builder().bucket(b002).build());//指定策略String policy {Version: 2012-10-17,Statement: [{Effect: Allow,Principal: {AWS: [*]},Action: [s3:GetObject],Resource: [arn:aws:s3:::b002/*]}]};minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(b002).config(policy).build());}// 4.上传图片minioClient.uploadObject(UploadObjectArgs.builder().bucket(b002).object(公寓-健身房.jpg).filename(C:\\Users\\codercui\\Pictures\\7.images\\房间-厨房-2.jpg).build());}
}运行测试 运行上述代码然后查看MinIO管理页面观察是否上传成功。
项目当中实现真正的图片上传
1. 图片上传流程 可以看出图片上传接口接收的是图片文件返回的Minio对象的URL。
2. 图片上传接口开发 配置Minio Client
1.引入Minio Maven依赖 在common模块的pom.xml文件增加如下内容 dependencygroupIdio.minio/groupIdartifactIdminio/artifactId
/dependency
2.配置Minio相关参数
在application.yml中配置Minio的endpoint、accessKey、secretKey、bucketName等参数
minio:endpoint: http://hostname:portaccess-key: access-keysecret-key: secret-keybucket-name: bucket-name
注意上述hostname、port等信息需根据实际情况进行修改。
3.创建一个minio的配置类
在common模块中创建com.atguigu.lease.common.minio.MinioProperties内容如下
package com.cuihub.lease.common.minio;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;ConfigurationProperties(prefix minio)
Data
public class MinioProperties {private String endpoint;private String accessKey;private String secretKey;private String bucketName;
} ConfigurationProperties 需要的依赖添加到pom.xml当中去 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional/dependency
4.创建MinioConfiguration
在common模块中创建com.atguigu.lease.common.minio.MinioConfiguration内容如下
package com.cuihub.lease.common.minio;import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.SetBucketPolicyArgs;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;Configuration
EnableConfigurationProperties(MinioProperties.class)
public class MinioConfiguration {Autowiredprivate MinioProperties minioProperties;Beanpublic MinioClient minioClient() throws ServerException, InsufficientDataException,ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException,InvalidResponseException, XmlParserException, InternalException {MinioClient minioClient MinioClient.builder().endpoint(minioProperties.getEndpoint()).credentials(minioProperties.getAccessKey(), minioProperties.getAccessKey()).build();boolean bucketExistsFlag minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProperties.getBucketName()).build());if (!bucketExistsFlag){minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProperties.getBucketName()).build());String policy {Statement : [ {Action : s3:GetObject,Effect : Allow,Principal : *,Resource : arn:aws:s3:::%s/*} ],Version : 2012-10-17}.formatted(minioProperties.getBucketName());minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().config(policy).bucket(minioProperties.getBucketName()).build());}return minioClient;}
}
5. 创建一个控制类
package com.cuihub.lease.web.admin.controller.apartment;import com.cuihub.lease.common.result.Result;
import com.cuihub.lease.web.admin.service.FileService;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.errors.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.StringReader;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;Tag(name 文件管理)
RequestMapping(/admin/file)
RestController
public class FileUploadController {Autowiredprivate FileService fileService;Operation(summary 上传文件)CrossOriginPostMapping(upload)public ResultString upload(RequestParam MultipartFile file) throws Exception {String url fileService.upload(file);
// System.out.println(url url);return Result.ok(url);}}6.创建FileService业务逻辑层
package com.cuihub.lease.web.admin.service;import org.springframework.web.multipart.MultipartFile;import java.io.IOException;public interface FileService {
String upload(MultipartFile multipartFile) throws Exception;
}7.创建一个j接口实现类imp
package com.cuihub.lease.web.admin.service.impl;import com.cuihub.lease.common.minio.MinioProperties;
import com.cuihub.lease.web.admin.service.FileService;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;Service
public class FileServiceImpl implements FileService {Autowiredprivate MinioProperties minioProperties;Autowiredprivate MinioClient minioClient;Overridepublic String upload(MultipartFile file) throws Exception {//获取原始文件名String originalFilename file.getOriginalFilename();//创建新的文件名SimpleDateFormat sdf new SimpleDateFormat(yyyyMMdd);originalFilename sdf.format(new Date()) / ( UUID.randomUUID().toString().replaceAll(-, ))_originalFilename;minioClient.putObject(PutObjectArgs.builder().stream(file.getInputStream(), file.getSize(), -1).contentType(file.getContentType()).bucket(minioProperties.getBucketName()).object(originalFilename).build());System.out.println(minioProperties.getEndpoint()minioProperties.getBucketName()fashedkjhgft);String url String.format(%s/%s,minioProperties.getEndpoint(),minioProperties.getBucketName())/originalFilename;return url;}
}这时候你就可以给前端返回一个图片的url地址啦
注意 1.添加配置文件指定桶名 2.String.format 当中的占位符是%s这里的s是小写如果是大写%S那么返回的地址里面的字母全是大写的了