使用Minio搭建自己的文件系统

目录

1、Minio安装与启动

 2、Minio控制台创建存储桶

 3、存储桶权限

4、控制台实现文件的上传与下载

5、使用Springboot与Minio整合实现文件的增删查改

1、Minio安装与启动

  • 找一个目录,用来存放我们的minio文件。
cd /usr/local

mkdir minio
  • 下载:
 wget https://dl.min.io/server/minio/release/linux-amd64/minio
  • 给minio这个文件赋予权限,作为文件启动
chmod +x minio
  • 使用以下命令启动
./minio server start

当你能看到这个界面的时候,说明你就成功了。

  • 提示1:

下面的两个红色的并不是报错,而是警告,也可以是一个建议。

  • 第一句翻译:控制台断点的侦听端口并不是固定的,请使用 --console-address指定端口启动
  • 第二句翻译:默认初始凭证账号和密码是minioadmin和minioadmin 你可以在环境变量中去更改他。但是我这儿就不修改了,如果你想修改你可以去profile下面使用export命名来加上他说的那个变量名来指定账号和密码。
  • 提示2:

如果你是本地虚拟机,启动后只需要使用ip:9000端口来实现访问,如果访问不了,请关掉防火墙,命令:
systemctl stop firewalld


如果你是云服务器,请放行9000端口和他提示出来的端口。9000作为API端口是不变的,但是你同样可以指定修改他,控制台端口经过我自己测试,他每次启动都会发生改变,所以我们还是建议使用指定端口启动。

  • 提示3:

我们上面的启动命令,他启动好了之后日志可以指定到目录去存储,只需要将./minio server start 命令更换成 ./minio server /home/minio/data 其中/home/minio/data是我自己定义的目录,你可以随便定义。

  • 提示4:
  • 我们上面的启动命令,他启动好了之后日志可以指定到目录去存储,只需要将./minio server start 命令更换成 ./minio server /home/minio/data 其中/home/minio/data是我自己定义的目录,你可以随便定义。
  • 启动后会占用控制台,我们也可以将他调整成为后台启动,加上指定的端口,我们就可以完成自定义的设置。具体启动命令如下:
  • nohup ./minio server --console-address ':41169' /home/minio/data/ > /home/minio/data/minio.log 2>&1 &

意思就是,指定控制台端口为41169,并且生成日志文件到/home/minio/data目录下的minio.log中

访问ip:9000进入登录界面 使用默认账号进行登录

 

 2、Minio控制台创建存储桶

 

 3、存储桶权限

 在创建好存储桶之后,我们为了使用远程连接来访问使用。所以有必要去修改一下存储桶的权限。

 我们点击最下面的那个Rules,然后点击右上角创建一个访问规则。可以使用精准匹配,也可以使用通配符。

 前缀我们使用* 这样可以匹配全部访问用户,下面的权限我们使用读写。

4、控制台实现文件的上传与下载

 我们点到左边的功能栏,然后选择右边我们刚创建的存储桶。

同样,在上传成功后,也提供下载与预览功能。

5、使用Springboot与Minio整合实现文件的增删查改

  • 添加依赖

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>6.0.11</version>
</dependency>
  • 创建自定义属性与配置类
minio:
  accesskey: minioadmin
  secretkey: minioadmin
  url: http://ip:9000
  bucketname: zxy-images
@Component
@Data
public class MinioProperties {


    /**
     * API调用地址
     */
    @Value("${minio.url}")
    private String url;

    /**
     * 连接账号
     */
    @Value("${minio.accesskey}")
    private String accessKey;

    /**
     * 连接秘钥
     */
    @Value("${minio.secretkey}")
    private String secretKey;

}
@Configuration
@Slf4j
public class MinioConfig {


    @Resource
    private MinioProperties minioProperties;

    @Bean
    public MinioClient getMinioClient(){
        try {
            return new MinioClient(minioProperties.getUrl(), minioProperties.getAccessKey(), minioProperties.getSecretKey());
        } catch (InvalidEndpointException | InvalidPortException e) {
            e.printStackTrace();
            log.info("-----创建Minio客户端失败-----");
            return null;
        }
    }
}
  • 文件上传

public void upload(MultipartFile file) throws IOException, XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, InvalidArgumentException, InvalidResponseException, InternalException, NoResponseException, InvalidBucketNameException, InsufficientDataException, ErrorResponseException {
        if (file == null || file.getSize() == 0 || file.isEmpty()) {
            throw new RuntimeException("上传文件为空,请重新上传");
        }
        // 获取文件名
        String filename = file.getOriginalFilename();
        assert filename != null;
        /* 像下面这样写最主要是为了用来做分割,同时也保证文件名是唯一的 */
        String newFilename = UUID.randomUUID().toString() + "|" + filename + filename.substring(filename.lastIndexOf("."));
        minioClient.putObject(bucketName, newFilename, file.getInputStream(), file.getSize(), null, null, file.getContentType());
    }
  • 文件下载

public InputStream download(String fileName, HttpServletResponse response) {

        InputStream inputStream = null;
        // 根据文件名拿到minio中的文件对象
        try {
            ObjectStat object = minioClient.statObject(bucketName, fileName);
            // 设置响应头类型
            response.setContentType(object.contentType());
            inputStream = minioClient.getObject(bucketName, fileName);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return inputStream;
    }
  • 查询全部文件
public Iterable<Result<Item>> listObjects() {
        try {
            return minioClient.listObjects(bucketName);
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
        return null;
    }
  • 删除指定文件
public void deleteFile(String fileName){
        try {
            minioClient.removeObject(bucketName,fileName);
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值