MinIo实现上传下载预览操作指南

这篇具有很好参考价值的文章主要介绍了MinIo实现上传下载预览操作指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

总体步骤
第一步:引入依赖
第二步:配置参数类
第三步:添加MinIoUtil
第四步:接口中引用

上代码文章来源地址https://www.toymoban.com/news/detail-514352.html

<!--存储文件依赖-->
<dependency>
   <groupId>io.minio</groupId>
   <artifactId>minio</artifactId>
   <version>7.1.0</version><br> </dependency>
/**
 * minio相关配置 也可以配置在yml文件
 */
@Component
public class ParamConfig {
 
    public static String endpoint = "http://127.0.0.1:9000";
    public static String accessKey = "minioadmin";
    public static String secretKey = "minioadmin";
    public static String bucketName = "uavtest";
 
}


import cn.hutool.core.date.DateUtil;
import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.minio.messages.Bucket;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
 
import javax.annotation.PostConstruct;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
 
/**
 * Minio工具类
 */
@Slf4j
@Component
public class MinIoUtil {
 
    public static MinioClient minioClient;
 
    public static ParamConfig paramConfig;
 
    /**
     * 初始化minio配置
     */
    @PostConstruct
    public void init() {
        try {
            log.info("Minio Initialize........................");
            minioClient = MinioClient.builder().endpoint(paramConfig.endpoint).credentials(paramConfig.accessKey, paramConfig.secretKey).build();
            createBucket(paramConfig.bucketName);
            log.info("Minio Initialize........................successful");
        } catch (Exception e) {
            e.printStackTrace();
            log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace());
        }
    }
 
    /**
     * 判断bucket是否存在
     */
    @SneakyThrows(Exception.class)
    public static boolean bucketExists(String bucketName) {
        return minioClient.bucketExists(bucketName);
    }
 
    /**
     * 创建bucket
     */
    @SneakyThrows(Exception.class)
    public static void createBucket(String bucketName) {
        boolean isExist = minioClient.bucketExists(bucketName);
        if (!isExist) {
            minioClient.makeBucket(bucketName);
        }
    }
 
    /**
     * 获取全部bucket
     */
    @SneakyThrows(Exception.class)
    public static List<Bucket> getAllBuckets() {
        return minioClient.listBuckets();
    }
 
    /**
     * 文件上传
     *
     * @param bucketName: 桶名
     * @param fileName:   文件名
     * @param filePath:   文件路径
     */
    @SneakyThrows(Exception.class)
    public static void upload(String bucketName, String fileName, String filePath) {
        minioClient.putObject(bucketName, fileName, filePath, null);
    }
 
    /**
     * 上传文件
     * 返回可以直接预览文件的URL
     */
    public static String uploadFile(MultipartFile file) {
        try {
            //如果存储桶不存在则创建
            if (!bucketExists(ParamConfig.bucketName)) {
                createBucket(ParamConfig.bucketName);
            }
            PutObjectOptions putObjectOptions = new PutObjectOptions(file.getInputStream().available(), -1);
            putObjectOptions.setContentType(file.getContentType());
            String originalFilename = file.getOriginalFilename();
            //得到文件流
            InputStream inputStream = file.getInputStream();
            //保证文件不重名(并且没有特殊字符)
            String fileName = ParamConfig.bucketName + DateUtil.format(new Date(), "_yyyyMMddHHmmss") + originalFilename;
            minioClient.putObject(ParamConfig.bucketName, fileName, inputStream, putObjectOptions);
            return getPreviewFileUrl(ParamConfig.bucketName, fileName);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
 
    /**
     * 文件上传
     * 返回下载文件url地址 和下面upload方法仅传参不同
     * bucketName 也可以直接从ParamConfig对象中获取
     */
    @SneakyThrows(Exception.class)
    public static String upload(String bucketName, String fileName, InputStream stream) {
        minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));
        return getPreviewFileUrl(bucketName, fileName);
    }
 
    /**
     * 文件上传
     * 返回下载文件url地址  和上面upload方法仅传参不同
     */
    @SneakyThrows(Exception.class)
    public static String upload(String bucketName, MultipartFile file) {
        final InputStream is = file.getInputStream();
        final String fileName = file.getOriginalFilename();
        minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));
        is.close();
        return getPreviewFileUrl(bucketName, fileName);
    }
 
    /**
     * 删除文件
     *
     * @param bucketName: 桶名
     * @param fileName:   文件名
     */
    @SneakyThrows(Exception.class)
    public static void deleteFile(String bucketName, String fileName) {
        minioClient.removeObject(bucketName, fileName);
    }
 
    /**
     * 下载文件
     */
//    @SneakyThrows(Exception.class)
//    public static void download(String bucketName, String fileName, HttpServletResponse response) {
//        // 获取对象的元数据
//        final ObjectStat stat = minioClient.statObject(bucketName, fileName);
//        response.setContentType(stat.contentType());
//        response.setCharacterEncoding("UTF-8");
//        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
//        InputStream is = minioClient.getObject(bucketName, fileName);
//        IOUtils.copy(is, response.getOutputStream());
//        is.close();
//    }
 
    /**
     * 获取minio文件的下载或者预览地址
     * 取决于调用本方法的方法中的PutObjectOptions对象有没有设置contentType
     *
     * @param bucketName: 桶名
     * @param fileName:   文件名
     */
    @SneakyThrows(Exception.class)
    public static String getPreviewFileUrl(String bucketName, String fileName) {
        return minioClient.presignedGetObject(bucketName, fileName);
    }
 
}



@ResponseBody
   @PostMapping("/tFlightFileUpload")
   @ApiOperation(value = "文件上传管理-添加minio")
   public Response add(@RequestParam("file") MultipartFile file) throws IOException {
       String url = MinIoUtil.uploadFile(file);
       return Response.success(url);
   }```



注意:通过minioClient.presignedGetObject(bucketName, fileName) 获取的链接是下载还是预览的区别是上传文件时是否有指定 ContentType属性 
      添加了      putObjectOptions.setContentType(file.getContentType());
      获取的链接就是预览链接,Minio支持图片及pdf格式文件预览


转自
https://www.cnblogs.com/wffzk/p/15961335.html



到了这里,关于MinIo实现上传下载预览操作指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【分布式文件存储】MinIO部署及实现文件上传下载

    目录 概述 MinIO集群部署 准备docker-compose.yml 测试启动 MinIO用户管理 Buckets管理  创建Buckets MinIO客户端 引入依赖   文件上传下载Demo 调用API碰到的问题 MinIO | 高性能, Kubernetes 原生对象存储 MinIO是全球领先的对象存储先锋,目前在全世界有数百万的用户。 高性能 ,在标准硬件

    2024年02月07日
    浏览(58)
  • Java实现minio上传、下载、删除文件,支持https访问

    MinIO 是一款高性能、分布式的对象存储系统,Minio是基于Go语言编写的对象存储服务,适合于存储大容量非结构化的数据,例如图片、音频、视频、备份数据等 , 传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。 导入minio依赖包 application.yml配置文件 配置

    2024年02月05日
    浏览(51)
  • minio + linux + docker + spring boot实现文件上传与下载

    检查linux内核,必须是3.10以上 安装docker 启动docker 搜索镜像 拉取镜像 启动minio -p: 指定端口映射,格式为:主机端口:容器端口 (这里注意要映射两个,否则API会访问不到) -e “MINIO_ROOT_USER=vinci” minio用户名; -e MINIO_SECRET_KEY=123456 minio 密码 -d: 后台运行容器,并返回容器ID; -

    2024年02月07日
    浏览(56)
  • springboot+微信小程序实现文件上传下载(预览)pdf文件

    实现思路: 选择文件 wx.chooseMessageFile ,官方文档: https://developers.weixin.qq.com/miniprogram/d e v/api/media/image/wx.chooseMessageFile.html 上传文件 `wx,uploadFile` , 官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/wx.uploadFile.html 查看所有上传的pdf文件,显示在页面上 点击pdf文件

    2024年02月08日
    浏览(68)
  • MINIO服务器基于AWS S3 SDK 文件分片上传及下载(C++实现)

    安装环境依赖: 获取SDK源码并安装: 项目中CMakeLists.txt配置: SDK文档资料 C++_SDK.pdf 实现下载的整体类代码下载 具体内容如下

    2024年04月10日
    浏览(66)
  • 微信小程序---图片裁剪、旋转、预览、上传功能实现(已经封装成组件,需要的到资源下载)

    1、可以拍摄或选择本地图片上传图片数据 2、图片上传数据可以进行裁剪、选择、取消、裁剪后预览、上传以及限制大小,还可以缩放操作,需要的可以解除限制即可 1、点击图片上传按钮时,跳转页面到cropper进行图片选择剪切 wx.navigateTo({       url: `/pages/cropper/cropper?d

    2023年04月26日
    浏览(68)
  • Flutter:文件上传与下载(下载后预览)

    dio是一个强大的Dart Http请求库,提供了丰富的功能和易于使用的API,支持文件上传和下载。 这个就不介绍了,网上有很多的封装案例。 简介 适用于iOS,Android,MacOS,Windows和Linux的后台文件下载器和上传器。 官方文档 https://pub-web.flutter-io.cn/packages/background_downloader 安装 注意:

    2024年02月13日
    浏览(62)
  • SpringBoot整合minio,文件的上传下载,批量获取

    Minio是GlusterFS创始人之一Anand Babu Periasamy发布新的开源项目。基于Apache License v2.0开源协议的对象存储项目,采用Golang实现,客户端支Java,Python,Javacript, Golang语言。 其设计的主要目标是作为私有云对象存储的标准方案。主要用于存储海量的图片,视频,文档等。非常适合于存储

    2024年02月12日
    浏览(45)
  • 【minio】Ubuntu安装MinIO文件服务器并通过C++上传下载

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍MinIO的使用。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习知识,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 MinIO是一种高性能、可扩展的 对象存储服务 ,它可以在私有云、公共云和边缘计

    2024年02月08日
    浏览(55)
  • SpringBoot+vue文件上传&下载&预览&大文件分片上传&文件上传进度

    SpringBoot+vue 大文件分片下载 Blob File spark-md5根据文件内容生成hash 大文件分片上传(批量并发,手动上传)vue组件封装-form组件 vue上传大文件/视频前后端(java)代码 springboot+vue自定义上传图片及视频 SpringBoot + VUE实现前台上传文件获取实时进度( 使用commons-fileupload设置上传监听

    2024年02月05日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包