minio图床搭建


前言

图床是用来存储和分享图片的一种在线服务。在实际应用中,图床正好满足这样的需求,通过将图片上传到图床上,我们不仅可以在多个平台上随时引用这些图片,还可以方便地管理和分享这些图片资源。

另外,使用图床还可以大大减轻服务器的存储压力,因为图片占用的存储资源较大,如果直接保存在服务器上,会导致存储压力过大。将图片资源可以保存在自己的指定位置,更加安全


技术选型

我们一般可以使用阿里云的oss也可以自己搭建minio来存储图片资源,下面我们看看如何去搭建自己的图床,这里我主要演示minio,来记录自己的搭建过程

Minio

Minio 是一个开源的对象存储服务器,支持 Amazon S3 API。它可以将不同的存储后端,例如本地文件系统抽象成一个统一的对象存储服务,并提供对标准 S3 API 的支持。

使用 Minio,你可以轻松搭建一个高可用、高可靠和高性能的对象存储服务,用于存储和处理海量数据。

关于minioWeb页面国际化:https://github.com/minio/console/issues/860

优点

  • 简单易用:Minio 的命令行工具和 Web 管理界面非常简单易用,具有良好的用户体验和开箱即用的特性。
  • 高度可扩展:Minio 可以通过分布式架构扩展到数百个节点,以实现更好的性能和容错能力。
  • 开放源代码:Minio 是一个开放源代码的项目,具有强大的社区支持和活跃的开发者社区。
  • 安全性:Minio 支持多种加密方式和身份验证机制,可以确保数据安全和隐私保护

服务器搭建步骤

按照如下命令无脑操作即可

下载和安装

mkdir -p  /home/minio
cd /home/minio
wget https://dl.min.io/server/minio/release/linux-amd64/minio

配置(密钥、日志、存储空间)

# 给minio赋权
chmod +x minio

# 设置用户名、密码
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin
 
# 创建存储目录及日志文件
mkdir -p /home/minio/data
cd /home/minio/data
# 创建日志文件
touch minio.log

启动

cd /home/minio
nohup ./minio server --address '0.0.0.0:9000' --console-address '0.0.0.0:9999' /home/minio/data >/home/minio/data/minio.log 2>&1 &

JavaJDK

Xml

<!--minio-->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.2.1</version>
</dependency>

配置使用路径

@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {
    /**
     * 服务地址
     */
    public String url;

    /**
     * 用户名
     */
    public String accessKey;

    /**
     * 密码
     */
    public String secretKey;

    /**
     * 存储桶名称
     */
    public String bucketName;

    // "如果是true,则用的是https而不是http,默认值是true"
    public static Boolean secure = false;


    @Bean
    public MinioClient getMinioClient() {
        return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
    }

}

工具类

在这个工具类中我们先定义三个方法

@Component
public class MinioUtil {
    @Autowired
    private MinioClient minioClient;
}
  • 查看桶是否存在
/**
 * 查询bucket中是否已经存在
 *
 * @param bucketName 桶名
 * @return 是否存在
 */
public Boolean bucketExists(String bucketName) {
    Boolean found;
    try {
        found = minioClient.bucketExists(BucketExistsArgs
                .builder()
                .bucket(bucketName)
                .build());
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return found;
}
  • 创建桶
    web页面直接点击按钮创建即可,这里就不去展示了,下面演示使用java中的SDK去实现创建bucket(这里看不懂的可以去看看Fluent API 的思想)
/**
 * 创建存储bucket
 *
 * @param bucket 桶名
 * @return 是否创建成功
 */
public Boolean makeBucket(String bucket) {
    try {
        minioClient.makeBucket(MakeBucketArgs
                .builder()
                .bucket(bucket)
                .build());
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return true;
}
  • 上传文件
/**
 * 文件上传
 * @param file 文件路径
 * @param fileName 存储的bucket
 * @param bucketName 文件名
 * @return 是否上传成功
 */
public Boolean upload(InputStream file, String fileName, String bucketName){
    try {
        PutObjectArgs objectArgs = PutObjectArgs
                .builder()
                .bucket(bucketName)
                .object(fileName)
                // 将分块大小设置为 10MB
                .stream(file, -1, 10485760L)
                //这里如果是上传其他的文件,可以使用api去获取到其他文件的格式
                .contentType("image/jpeg")
                .build();
        //文件名称相同会覆盖
        minioClient.putObject(objectArgs);
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

上传图片实战

下面我还是将这个封装了一个上传本地图片的方法

  • 这里先注入一下配置信息
@Autowired
private MinioUtil minioUtil;

@Autowired
private MinioConfig minioConfig;
- 工具方法(这里使用前面一些工具类里面的方法)
/**
 * 根据传入的文件路径去返回生成的图片
 *
 * @param fileUrl 图片路径
 * @return 网络地址
 */
public String uploadFileMinio(String fileUrl) {

    boolean flag = false;
    // 判断存储桶是否存在
    if (!minioUtil.bucketExists(minioConfig.getBucketName())) {
        minioUtil.makeBucket(minioConfig.getBucketName());
    }
    // 生成文件名
    String fineName = fileUrl.substring(fileUrl.length() - 8, fileUrl.length() - 4);
    try {
        File file = new File(fileUrl);
        InputStream inputStream = new FileInputStream(file);
        // 上传文件
        flag = minioUtil.upload(inputStream, fineName, minioConfig.getBucketName());
    } catch (Exception e) {
        return null;
    }
    // 判断是否上传成功,成功就返回url,不成功就返回null
    if (flag) {
        return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fineName;
    }
    return null;
}

第三方图床都有图片被删的可能性。现在能访问,但是谁也不能保证以后还能不能访问,所以自己的东西还是得自己保管。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远方的雁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值