Minio实现上传下载功能

Minio的简单使用,实现上传下载功能。

简单介绍下这个minio

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
而且关键的是它是开源的,也特别容易上手,上传下载的速度也很快,安全。

docker环境

在Linux下装好docker,这里不多赘述docker的安装过程
安装好了之后:

1.拉取Minio镜像(稳定版):

docker pull minio/minio

2.运行于docker环境

①. docker run -p 9000:9000 minio/minio server /data
②. docker run -p 9000:9000 --name minio-iot -v /mnt/data:/data -v /mnt/config:/root/.minio minio/minio server /data
以上两个为存储路径
① 的方式为临时性的存储位置在docker容器中,容器的创建、启动、停止、删除、暂停,文件的展示等会影响,对于这个概念的理解可以看看这篇文章—>容器(Container)——镜像运行时的实体
② 数据卷 文件存储的位置为/mnt/data的,这个可以自己定。
备注: 运行安装已经下在的minio : 9000:9000 第一个是外部接口,第二个是内部接口, server 安装到 data

3.CTRL+C关闭运行
4.开启

docker start CONTAINER ID/NAMES (容器id或者容器名)
这里我运行: docker start minio

打开 ip:9000/minio
密码默认:minioadmin/minioadmin
在这里插入图片描述
这样的界面就算完成。

上传下载实例(Java版)

@RestController
@RequestMapping("/minio")
public class MinioController {
    private static String url = "*******";
    private static String accessKey = "minioadmin";
    private static String secretKey = "minioadmin";

    //上传文件到minio服务器
    @PostMapping("files")
    public String uploadFiles(@RequestParam("fileName") MultipartFile file) {
        try{
            MinioClient minioClient = new MinioClient(url, accessKey, secretKey);//minio客户端
            InputStream is = file.getInputStream();//获取文件流
            String filename = file.getOriginalFilename();//获取文件名称
            String contentType = file.getContentType();//获取文件类型
            minioClient.putObject("files",filename,is,contentType);//添加文件到(minio)存储桶中
            return "上传成功!";
        }
        catch (Exception ex) {
            ex.printStackTrace();
            return "上传失败!";
        }
    }

	/*
    * 下载文件
    * presignedGetObject(String bucketName, String objectName, Integer expires)
    * 生成一个给HTTP GET请求用的presigned URL。浏览器/移动端的客户端可以用这个URL进行下载,
    * 即使其所在的存储桶是私有的。这个presigned URL可以设置一个失效时间,默认值是7天。
    * */
    @GetMapping("download")
    public void downloadFiles(@RequestParam("filename") String filename, HttpServletResponse httpResponse) throws InvalidPortException, InvalidEndpointException {
        MinioClient minioClient = new MinioClient(url,accessKey,secretKey);
        try(InputStream ism = new BufferedInputStream(minioClient.getObject("files",filename))) {
            // 调用statObject()来判断对象是否存在。
            // 如果不存在, statObject()抛出异常,
            // 否则则代表对象存在
            minioClient.statObject("files", filename);
            byte buf[] = new byte[1024];
            int length = 0;
            httpResponse.reset();
            //Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。
            // Content-disposition其实可以控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名,
            // 文件直接在浏览器上显示或者在访问时弹出文件下载对话框。
            httpResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
            httpResponse.setContentType("application/x-msdownload");
            httpResponse.setCharacterEncoding("utf-8");
            OutputStream osm = new BufferedOutputStream(httpResponse.getOutputStream());
            while ((length = ism.read(buf))>0) {
                osm.write(buf,0, length);
            }
            osm.close();
        } catch (MinioException ex) {
            ex.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        }
    }
附上minio的Java中文sdk文档 ----------👉传送阵
感谢各位大佬的阅读。
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于SpringBoot集成MinIO实现上传下载,我可以为你提供如下的解答: MinIO是一个开源的对象存储服务,支持S3协议,适用于云原生应用场景,具有高可用、高性能、易扩展等特点。SpringBoot是一个快速开发框架,可快速创建基于Spring的应用程序。二者集成后,可以快速实现文件上传下载功能。 首先,通过SpringBoot的依赖管理工具(如Maven或Gradle)引入MinIO的依赖包。然后,配置MinIO的连接信息,包括连接地址、端口、访问密钥等。接下来,通过MinIO的Java客户端SDK,实现文件上传下载的逻辑。具体步骤如下: 1. 引入依赖 在pom.xml中添加以下依赖: ``` <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.0.7</version> </dependency> ``` 2. 配置连接信息 可以通过配置文件或者代码方式配置连接信息。以下为代码配置方式: ``` @Configuration public class MinioConfig { @Bean public MinioClient minioClient() throws Exception { String endpoint = "localhost:9000"; String accessKey = "your-access-key"; String secretKey = "your-secret-key"; return MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } } ``` 3. 实现上传下载逻辑 以下为文件上传的示例代码: ``` @Autowired private MinioClient minioClient; public void uploadFile(String bucketName, String objectName, String fileName) throws Exception { // 检查Bucket是否存在,不存在则创建 boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (!found) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } // 上传文件 minioClient.uploadObject(UploadObjectArgs.builder() .bucket(bucketName) .object(objectName) .filename(fileName) .build()); } ``` 以下为文件下载的示例代码: ``` @Autowired private MinioClient minioClient; public void downloadFile(String bucketName, String objectName, String fileName) throws Exception { // 下载文件 minioClient.downloadObject(DownloadObjectArgs.builder() .bucket(bucketName) .object(objectName) .filename(fileName) .build()); } ``` 以上就是SpringBoot集成MinIO实现上传下载的基本步骤,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值