快速实现一个小文件存储

安装MinIO(Docker方式)

  • 下载MinIO的Docker镜像
docker pull minio/minio
  • 容器构建语句
docker run -p 9090:9000 --name minio \
  --restart=always \
  -v /mydata/minio/data:/data \
  -v /mydata/minio/config:/root/.minio \
  -d minio/minio server /data
  • 构建成功运行之后
    运行成功后,访问http://ip:9090来进行登陆,默认Access Key和Secret都是minioadmin:
    在这里插入图片描述

MinIO的配置使用

  • 在存储文件之前,我们需要新建一个存储桶:
    在这里插入图片描述
  • 存储桶创建完成后,通过上传按钮可以上传文件,这里我们上传一张图片:
    在这里插入图片描述
  • 图片上传完成后,我们可以通过拷贝链接按钮来获取图片访问路径,但是这只是个临时的访问路径:
    在这里插入图片描述
  • 要想获取一个永久的访问路径,需要修改存储桶的访问策略,我们可以点击存储桶右上角的编辑策略按钮来修改访问策略;
    在这里插入图片描述
  • 这里有三种访问策略可以选择,一种只读、一种只写、一种可读可写,这里我们选择只读即可,但是需要注意的是,访问前缀需要设置为*.*,否则会无法访问;
    在这里插入图片描述
  • 设置完成后,我们只需要通过拷贝链接中的前一串路径即可永久访问该文件;
    在这里插入图片描述
  • 效果
    在这里插入图片描述

springBoot集成MinIO实现图片的上传和删除

  • 流程图
    在这里插入图片描述

在pom.xml中添加MinIO的相关依赖

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>3.0.10</version>
</dependency>

在SpringBoot中开启文件上传功能,需要在application.yml添加如下配置

spring:
  servlet:
    multipart:
      enabled: true #开启文件上传
      max-file-size: 10MB #限制文件上传大小为10M

添加一个Controller控制器用于实现文件的上传和删除操作

import com.wdj.common.CommonResult;
import com.wdj.model.MinioUploadDto;
import io.minio.MinioClient;
import io.minio.policy.PolicyType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author wdj
 * Created on 2021/1/25 16:38
 */
@Api(tags = "MinioController", value = "MinIO对象存储管理")
@RestController
@RequestMapping("/minio")
public class SmallOssController {
    private static final Logger LOGGER = LoggerFactory.getLogger(SmallOssController.class);
    @Value("${minio.endpoint}")
    private String ENDPOINT;
    @Value("${minio.bucketName}")
    private String BUCKET_NAME;
    @Value("${minio.accessKey}")
    private String ACCESS_KEY;
    @Value("${minio.secretKey}")
    private String SECRET_KEY;

    @ApiOperation("文件上传")
    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult upload(@RequestParam("file") MultipartFile file) {
        try {
            //创建一个MinIO的Java客户端
            MinioClient minioClient = new MinioClient(ENDPOINT, ACCESS_KEY, SECRET_KEY);
            boolean isExist = minioClient.bucketExists(BUCKET_NAME);
            if (isExist) {
                LOGGER.info("存储桶已经存在!");
            } else {
                //创建存储桶并设置只读权限
                minioClient.makeBucket(BUCKET_NAME);
                minioClient.setBucketPolicy(BUCKET_NAME, "*.*", PolicyType.READ_ONLY);
            }
            String filename = file.getOriginalFilename();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            // 设置存储对象名称
            String objectName = sdf.format(new Date()) + "/" + filename;
            // 使用putObject上传一个文件到存储桶中
            minioClient.putObject(BUCKET_NAME, objectName, file.getInputStream(), file.getContentType());
            LOGGER.info("文件上传成功!");
            MinioUploadDto minioUploadDto = new MinioUploadDto();
            minioUploadDto.setName(filename);
            minioUploadDto.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName);
            return CommonResult.success(minioUploadDto);
        } catch (Exception e) {
            LOGGER.info("上传发生错误: {}!", e.getMessage());
        }
        return CommonResult.failed();
    }

    @ApiOperation("文件删除")
    @RequestMapping(value = "/delete", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult delete(@RequestParam("objectName") String objectName) {
        try {
            MinioClient minioClient = new MinioClient(ENDPOINT, ACCESS_KEY, SECRET_KEY);
            minioClient.removeObject(BUCKET_NAME, objectName);
            return CommonResult.success(null);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return CommonResult.failed();
    }
}

在application.yml中对MinIO客户端进行配置

# MinIO对象存储相关配置
minio:
  endpoint: http://ip:9090 #MinIO服务所在地址
  bucketName: small-oss#存储桶名称
  accessKey: minioadmin #访问的key
  secretKey: minioadmin #访问的秘钥

使用postman进行测试

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element-UI 是一套基于 Vue.js 的组件库,它提供了丰富的可复用的 UI 组件,可以帮助我们快速构建美观、交互丰富的前端界面。下面是一个使用 Element-UI 实现一个 Vue 文件管理的简单示例: 首先,我们需要安装 Element-UI,可以通过 npm 或者 yarn 进行安装: ``` npm install element-ui ``` 然后,在 Vue 项目的入口文件中引入 Element-UI: ```javascript import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); ``` 接下来,我们可以创建一个 Vue 组件来实现文件管理的功能。假设我们有一个 FileManagement.vue 文件,代码如下: ```vue <template> <div> <el-table :data="fileList" style="width: 100%"> <el-table-column prop="name" label="文件名"></el-table-column> <el-table-column prop="size" label="大小"></el-table-column> <el-table-column prop="type" label="类型"></el-table-column> </el-table> </div> </template> <script> export default { data() { return { fileList: [ { name: 'file1.txt', size: '10KB', type: '文本文件' }, { name: 'file2.jpg', size: '100KB', type: '图片文件' }, { name: 'file3.doc', size: '50KB', type: '文档文件' }, ], }; }, }; </script> <style> /* 样式可以根据需求进行自定义 */ </style> ``` 在上面的代码中,我们使用了 Element-UI 的 el-table 组件来展示文件列表,el-table-column 组件用于定义表格的列。fileList 是一个数组,用于存储文件的信息。 这样,我们就实现一个简单的 Vue 文件管理界面。你可以根据实际需求进行扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值