当前位置: 代码网 > 服务器>服务器>云虚拟主机 > Docker安装Minio+SpringBoot上传下载文件方式

Docker安装Minio+SpringBoot上传下载文件方式

2024年11月26日 云虚拟主机 我要评论
docker安装miniodocker pull minio/miniodocker imagesrepository tag image id created

docker安装minio

docker pull minio/minio
docker images
repository    tag       image id       created      size
minio/minio   latest    162489e21d26   7 days ago   165mb
nginx         latest    7f553e8bbc89   7 days ago   192mb
# 外挂磁盘存储使用
mkdir -p /usr/local/minio/data
# 外挂配置文件使用
mkdir -p /usr/local/minio/config
# 创建minio 容器
docker run -d   --name minio   -p 9000:9000   -p 9001:9001   -v /usr/local/minio/data:/data   -v /usr/local/minio/config:/root/.minio   -e minio_root_user=admin   -e minio_root_passwo
rd=admin   minio/minio server /data --console-address ":9001"
# 创建失败
docker logs minio
fatal unable to validate credentials inherited from the shell environment: invalid credentials
      > please provide correct credentials
      hint:
        minio_root_user length should be at least 3, and minio_root_password length at least 8 characters
# 密码不能少于8个字符
docker rm minio
docker run -d   --name minio   -p 9000:9000   -p 9001:9001   -v /usr/local/minio/data:/data   -v /usr/local/minio/config:/root/.minio   -e minio_root_user=admin   -e minio_root_passwo
rd=admin123   minio/minio server /data --console-address ":9001"
# 防火墙开放端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9001/tcp --permanent
# 重启防火墙
sudo firewall-cmd --reload

访问测试

http://ip:9001

springboot上传文件到minio

pom文件引入依赖

     <dependency>
         <groupid>io.minio</groupid>
         <artifactid>minio</artifactid>
         <version>8.5.2</version>
     </dependency>

application.properties配置minio

spring.minio.access-key=pnehtjudw9enblulvtgt
spring.minio.secret-key=p3yvngz2ei1uctn6vkozrof6icb7gfbiypr5raww
spring.minio.endpoint=http://192.168.10.227:9000

配置minioclinet

@data
@configuration
@configurationproperties(prefix = "spring.minio")
@slf4j
public class minioconfig {

    private string accesskey;
    private string secretkey;
    private string endpoint;

    @bean
    public minioclient minioclient() {
        return minioclient.builder()
                  .endpoint(endpoint)
                  .credentials(accesskey, secretkey)
                  .build();
    }
}

fileservice

public interface fileservice {

    /**
     * 是否存在桶
     */
    boolean bucketexists(string bucketname);

    /**
     * 创建桶
     */
    void makebucket(string bucketname);

    /**
     * 删除桶
     */
    void removebucket(string bucketname);

    /**
     * 获取当所有桶
     */
    list<bucket> getallbuckets();

    /**
     *  上传文件
     */
    string uploadfile(string bucketname, string prefix, multipartfile file) throws exception;

    /**
     * 文件预览
     */
    string preview(string bucketname, string prefix, string filename) throws exception;

    /**
     * 文件下载
     */
    void download(string bucketname, string prefix, string filename, httpservletresponse res);

    /**
     * 删除文件
     */
    boolean removefile(string bucketname, string prefix, string filename);

    /**
     * 文件是否存在
     */
    boolean isfileexists(string bucketname, string prefix, string filename) throws exception;

    /**
     * 生成一个带到期时间、签名的url,这个地址可以提供给没有登录的第三方共享访问或者上传对象,针对于bucket为私有的情况
     */
    string getpresignedobjecturl(string bucketname, string prefix, string filename);
}

fileserviceimpl

package com.example.demo.service.impl;

import java.util.list;
import java.util.objects;
import java.util.uuid;
import javax.servlet.http.httpservletresponse;

import cn.hutool.core.io.file.filenameutil;
import com.example.demo.service.fileservice;
import io.minio.*;
import io.minio.http.method;
import io.minio.messages.bucket;
import lombok.extern.slf4j.slf4j;
import org.apache.commons.lang3.stringutils;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;
import org.springframework.web.multipart.multipartfile;

/**
 * @author :王建
 * @since :2024-10-10 11:38
 */
@service
@slf4j
public class fileserviceimpl implements fileservice {

    @autowired
    private minioclient minioclient;

    @override
    public boolean bucketexists(string bucketname) {
        try {
            return minioclient.bucketexists(bucketexistsargs.builder().bucket(bucketname).build());
        } catch (exception e) {
            throw new runtimeexception(e);
        }
    }

    @override
    public void makebucket(string bucketname) {
        try {
            minioclient.makebucket(makebucketargs.builder()
                    .bucket(bucketname)
                    .build());
        } catch (exception e) {
            throw new runtimeexception(e);
        }
    }

    @override
    public void removebucket(string bucketname) {
        try {
            minioclient.removebucket(removebucketargs.builder()
                    .bucket(bucketname)
                    .build());
        } catch (exception e) {
            throw new runtimeexception(e);
        }
    }

    @override
    public list<bucket> getallbuckets() {
        try {
            return minioclient.listbuckets();
        } catch (exception e) {
            throw new runtimeexception(e);
        }
    }

    @override
    public string uploadfile(string bucketname, string prefix, multipartfile file) throws exception {
        string uuid = uuid.randomuuid().tostring();
        // 重新命名原来文件
        string filename = uuid + "." + filenameutil.extname(file.getoriginalfilename());
        log.info("源文件名称:{},重命名后文件名称:{}", file.getoriginalfilename(), filename);
        string objectname = stringutils.isblank(prefix) ? filename : "/" + prefix + "/" + filename;
        putobjectargs objectargs = putobjectargs.builder().bucket(bucketname).object(objectname)
                .stream(file.getinputstream(), file.getsize(), -1).contenttype(file.getcontenttype()).build();
        minioclient.putobject(objectargs);
        return uuid;
    }

    @override
    public string preview(string bucketname, string prefix, string filename) throws exception {
        // 查看文件地址
        string objectname = stringutils.isblank(prefix) ? filename : "/" + prefix + "/" + filename;
        getpresignedobjecturlargs build = getpresignedobjecturlargs.builder().bucket(bucketname).object(objectname).method(method.get).build();
        return minioclient.getpresignedobjecturl(build);
    }

    @override
    public void download(string bucketname, string prefix, string filename, httpservletresponse res) {

    }

    @override
    public boolean removefile(string bucketname, string prefix, string filename) {
        return null;
    }

    @override
    public boolean isfileexists(string bucketname, string prefix, string filename) throws exception {
        string objectname = stringutils.isblank(prefix) ? filename : "/" + prefix + "/" + filename;
        statobjectresponse statobjectresponse = minioclient.statobject(statobjectargs.builder().bucket(bucketname).object(objectname).build());
        return !objects.isnull(statobjectresponse);
    }

    @override
    public string getpresignedobjecturl(string bucketname, string prefix, string filename) {
        return null;
    }
}

配置minio允许直接预览pdf文件

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com