第三课 Spring Cloud分布式微服务实战-开发文件服务

本篇博客主要讲解了如何在Spring Cloud中开发文件服务,选择了MinIO作为文件服务器,详细介绍了MinIO的部署和配置,并探讨了其与阿里云OSS的优缺点。在服务模块中整合了MinIO的service和controller实现,最后提到了阿里云OSS的接入和内容安全策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第三课 Spring Cloud分布式微服务实战-开发文件服务

tags:

  • Java
  • 慕课网

categories:

  • MinIO
  • 内容安全

第一节 文件服务器

1.1 文件服务器选择

  1. 文件存储的网络服务选择有很多,比如阿里云OSS、七牛云、腾讯云等等, 有收费。
  2. fastDFS安装部署(运维)复杂度高,没有官方文档,维护比较麻烦。
  3. MinIO文档: http://docs.minio.org.cn/docs/ 开箱即用,UI页面,性能高。MinIO号称是世界上速度最快的对象存储服务器。在标准硬件上,对象存储的读/写速度最高可以达到183 GB/s和171 GB/s。文档齐全社区活跃。这里我们就选它(开箱即用)
  4. ceph 学习成本高 运维部署复杂。
  5. 一些分布式储存对比:https://www.cxyzjd.com/article/qq_32811865/107926890

1.2 部署MinIO

  1. 访问 web 管理页面: http://192.168.44.128:6090/login
  2. 创建bucket, 设置权限为public, 上传图片测试,访问路径这里注意是9000端口:http://192.168.44.128:9000/imooc/aa.png
  3. 如果权限为private,最多只有七天的分享访问时间。
sudo docker run -d -p 9000:9000 -p 6090:9090 --name minio1 \
  -e "MINIO_ROOT_USER=admin" \
  -e "MINIO_ROOT_PASSWORD=123456789" \
  -v /mnt/data:/data \
  --restart=always \
  minio/minio server /data --console-address ':9090'

在这里插入图片描述

第二节 MinIO文件上传

2.1 创建文件服务Module

在这里插入图片描述

  1. 创建Module, 名称为imooc-news-dev-service-files。和user一样引入api模块。
<!--    imooc-news-dev-service-files
        文件服务, 文件相关的服务都在此服务中进行,比如文件上传,文件下载-->
    <artifactId>imooc-news-dev-service-files</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.imooc</groupId>
            <artifactId>imooc-news-dev-service-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
  1. 先把配置文件和日志配置拿过来改一改。加上上传文件大小的限制。
  servlet:
    multipart:
      max-file-size: 512000 # 请求文件大小限制为500k
      max-request-size: 512000
  1. 把启动类和HelloWorld控制器拿过来,启动运行测试看看是否成功。发现报错
Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
  1. 因为我们把yaml文件中数据源的相关信息删除了,files文件服务中用不到数据源的东西。但是我们在common服务中配置了数据源的驱动, 所以它也会引用到。解决办法:自动装配时候排除某数据源的自动装配。
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class Application {
   
    public static void main(String[] args) {
   
        SpringApplication.run(Application.class, args);
    }
}
  1. common中引入MinIO的依赖包。
        <!-- 文件上传minio工具 -->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.3.3</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

2.2 整合MinIO的service实现

  1. 创建com.imooc.files.service.UploaderService接口。
package com.imooc.files.service;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;


public interface UploaderService {
   
    public String uploadMinIO(MultipartFile file) throws IOException, NoSuchAlgorithmException, InvalidKeyException;
}
  1. 配置application.yaml将minio的配置写到其中加载到容器中。
minio:
  endpoint: http://192.168.44.128:9000
  accessKey: MinIOAdmin
  secretKey: MinIOAdmin
  bucketName: "imooc"

  1. 在中com.imooc.files.utils.MinioProp写一个MinioProp的bean。把配置放到容器中。
package com.imooc.files.utils;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProp {
   
    private String endpoint;
    private String accesskey;
    private String secretKey;
    private String bucketName;
}
  1. 写一个实现类com.imooc.files.service.impl.UploaderServiceImpl。@Service把实现类注入到容器中。
package com.imooc.files.service.impl;

import com.imooc.exception.GraceException;
import com.imooc.files.service.UploaderService;
import com.imooc.files.utils.MinioProp;
import com.imooc.grace.result.ResponseStatusEnum;
import io.minio.*;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.UUID;
import java.io.IOException;
import java.io.InputStream;
import 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值