前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Minio搭建一个简单的文件服务系统

使用Minio搭建一个简单的文件服务系统

作者头像
用户1215919
发布2021-12-28 12:47:22
7890
发布2021-12-28 12:47:22
举报
文章被收录于专栏:大大的微笑大大的微笑

使用docker获取Minio镜像

代码语言:javascript
复制
	docker pull minio/minio:latest
运行
代码语言:javascript
复制
	docker run -d  -p 9000:9000 \
	--name filesystem   -v /usr/local/gps/data:/data   \
	-v /usr/local/gps/config:/root/.minio  \
	minio/minio server /data
另外可以设置登录的账号密码
代码语言:javascript
复制
  -e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
  -e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
访问
代码语言:javascript
复制
	ip: 9000
	默认账号密码:minioadmin / minioadmin
maven依赖
代码语言:javascript
复制
io.minio:minio:7.1.0
创建一个bucket(唯一)
代码语言:javascript
复制
	  minioClient.makeBucket(MakeBucketArgs.builder()
                   .bucket("bucket")
                   .build());
检查bucket是否已存在
代码语言:javascript
复制
 	minioClient.bucketExists(BucketExistsArgs.builder()
                    .bucket(“bucket”)
                    .build());
上传文件
代码语言:javascript
复制
	minioClient.putObject(
                    PutObjectArgs.builder()
                            .stream(inputStream, inputStream.available(), -1)
                            .bucket("bucket")
                            .contentType("content-type")
                            .object("fileName")
                            .build());
策略
获取
代码语言:javascript
复制
	minioClient.getObjectUrl("bucket", "fileName");
代码语言:javascript
复制
// 完整的代码
public class FileProcessImpl implements FileProcess {

    @Autowired
    private MinioClient minioClient;

    @Value("${minio.url}")
    private String url;

    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

    @Override
    public FileProcessResult<QueryUrlResult> getFileUrl(Module module, String fileName) {
        log.info("getFileUrl invoke, module:{}, fileName:{}, contentType:{}", module, fileName);
        if (module == null) {
            return FileProcessResult.FAILURE("404", "模块参数不允许为空");
        }

        String mediaUrl;
        try {
            mediaUrl = minioClient.getObjectUrl(module.getBucket(), fileName);
        } catch (Exception e) {
            log.error("getFileUrl fail, module:{}, fileName:{} e:{}", module, fileName, e);
            return FileProcessResult.FAILURE("502", "处理失败,请联系管理员");
        }

        return FileProcessResult.SUCCESS(QueryUrlResult.builder()
                .path(mediaUrl)
                .build());
    }

    @Override
    public FileProcessResult<UploadFileResult> uploadFile(Module module, InputStream inputStream, String contentType,
                                                          String fileName) {
        log.info("uploadFile invoke, module:{}, fileName:{}, contentType:{}", module, fileName, contentType);

        if (!bucketExists(module)) {
            makeBucket(module);
        }

        String folder = sdf.format(new Date());
        try {
            minioClient.putObject(
                    PutObjectArgs.builder()
                            .stream(inputStream, inputStream.available(), -1)
                            .bucket(module.getBucket())
                            .contentType(contentType)
                            .object(folder + "/" + fileName)
                            .build());

        } catch (Exception e) {
            log.error("uploadFile invoke fail, module:{}, fileName:{}, contentType:{},e:{}",
                    module, fileName, contentType, e);
            return FileProcessResult.FAILURE("502", "处理失败,请联系管理员");
        }

        String sourcePath = url + "/" + module.getBucket() + "/" + folder + "/" + fileName;
        return FileProcessResult.SUCCESS(UploadFileResult.builder()
                .path(sourcePath)
                .build());
    }

    @Override
    public boolean bucketExists(Module module) {

        log.info("bucketExists invoke, module:{}", module);

        try {
            if (module == null || StringUtils.isEmpty(module.getBucket())) {
                log.warn("bucketExists invoke, module must not be null!");
                return false;
            }

            return minioClient.bucketExists(BucketExistsArgs.builder()
                    .bucket(module.getBucket())
                    .build());

        } catch (Exception e) {
            log.error("bucketExists invoke fail, check bucket fail, module:{}, e:{}", module, e);
            return false;
        }

    }

    @Override
    public void makeBucket(Module module) {
        log.info("makeBucket invoke, module:{}", module);
        try {
            minioClient.makeBucket(MakeBucketArgs.builder()
                    .bucket(module.getBucket())
                    .build());

        } catch (Exception e) {
            log.error("makeBucket invoke fail, create bucket fail, module:{}, e:{}", module, e);
        }
    }
}
public enum Module {
    DEV("dev", "本地环境"),
    BETA("beta", "测试环境"),
    PRD("prd", "生产环境"),
    ;

    private String bucket;
    private String desc;


    Module(String bucket, String desc) {
        this.bucket = bucket;
        this.desc = desc;
    }


}
代码语言:javascript
复制
// 配置类
@Configuration
public class MinIoConfig {

    @Value("${minio.url}")
    private String url;

    @Value("${minio.access-key}")
    private String accessKey;

    @Value("${minio.secret-key}")
    private String secretKey;

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

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 运行
  • 另外可以设置登录的账号密码
  • 访问
  • maven依赖
  • 创建一个bucket(唯一)
  • 检查bucket是否已存在
  • 上传文件
  • 策略
  • 获取
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档