使用minio实现图片和视频的上传

这篇具有很好参考价值的文章主要介绍了使用minio实现图片和视频的上传。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ps:因为业务上遇到了用minio实现图片的上传所以记录一下使用

  • MinIO是一个开源的对象存储服务器,可以用来存储和检索任何类型的文件,包括图片、视频、文档等。MinIO的设计目标是为了提供高性能、高可用性和可扩展性的对象存储服务,同时保持简单易用和低成本。

  • 为啥要用对象存储服务器呢?

    数据库可以存储视频和图片,但是存储大量的视频和图片会占用大量的存储空间,导致数据库变得庞大和缓慢。此外,数据库的主要目的是存储和管理结构化数据,而视频和图片是非结构化数据,因此存储它们可能需要使用不同的技术和工具。因此,通常建议将视频和图片存储在专门的文件系统或云存储中,而不是直接存储在数据库中。

  • MinIO的主要特点包括:

    1. 高性能:MinIO使用Go语言编写,采用了一些优化技术,如并发、异步I/O等,可以实现高性能的对象存储服务。

    2. 高可用性:MinIO支持多副本复制和故障转移等机制,可以保证数据的可靠性和可用性。

    3. 可扩展性:MinIO采用分布式架构,可以通过添加新的节点来扩展存储容量和吞吐量。

    4. 简单易用:MinIO提供了简单易用的API和命令行工具,可以方便地进行对象存储的管理和操作。

    5. 低成本:MinIO可以运行在标准的硬件设备上,不需要专门的存储设备,可以降低存储成本。

    MinIO支持多种API和协议,包括S3、NFS、HDFS、Azure Blob Storage等,可以与各种应用程序和系统集成。此外,MinIO还提供了一些高级功能,如对象锁定、版本控制、事件通知等,可以满足不同的业务需求。

    总之,MinIO是一个功能强大、性能优越、易于使用和低成本的对象存储服务器,适用于各种规模的应用场景。阿里云和腾讯云的oss好像到10G要收费,我认为都可以使用操作都不难。

  • 在使用MinIO的Java SDK时,需要提供以下四个参数:

    1. ENDPOINT:MinIO服务器的地址,包括协议、主机名和端口号。例如,http://localhost:9000表示本地运行的MinIO服务器。

    2. ACCESS_KEY:访问密钥,用于身份验证。在MinIO中,每个用户都有一个访问密钥和一个秘密密钥,用于访问和管理存储桶和对象。

    3. SECRET_KEY:秘密密钥,用于身份验证。与访问密钥一起使用,用于访问和管理存储桶和对象。

    4. BUCKET_NAME:存储桶的名称,用于存储和管理对象。在MinIO中,每个存储桶都有一个唯一的名称。

  • ackage com.atguigu.gmall.product.controller;
    
    import com.atguigu.gmall.common.result.Result;
    import io.minio.BucketExistsArgs;
    import io.minio.MakeBucketArgs;
    import io.minio.MinioClient;
    import io.minio.PutObjectArgs;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.util.UUID;
    
    /**
     * @author 罗峰
     * @version 1.0
     * @description TODO
     * @date 2023-05-07 15:24
     */
    @RestController
    @RequestMapping("admin/product")
    public class FileUploadController {
    
        //  获取文件上传对应的地址
        @Value("${minio.endpointUrl}")
        public String endpointUrl;
    
        @Value("${minio.accessKey}")
        public String accessKey;
    
        @Value("${minio.secreKey}")
        public String secreKey;
    
        @Value("${minio.bucketName}")
        public String bucketName;
    
        //  文件上传控制器
        @PostMapping("fileUpload")
        public Result fileUpload(MultipartFile file) throws Exception{
            //  准备获取到上传的文件路径!
            String url = "";
    
            // 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
            // MinioClient minioClient = new MinioClient("https://play.min.io", "Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG");
            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint(endpointUrl)
                            .credentials(accessKey, secreKey)
                            .build();
            // 检查存储桶是否已经存在
            boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            if(isExist) {
                System.out.println("Bucket already exists.");
            } else {
                // 创建一个名为asiatrip的存储桶,用于存储照片的zip文件。
                minioClient.makeBucket(MakeBucketArgs.builder()
                        .bucket(bucketName)
                        .build());
            }
            //  定义一个文件的名称 : 文件上传的时候,名称不能重复!
            String fileName = System.currentTimeMillis()+ UUID.randomUUID().toString();
            // 使用putObject上传一个文件到存储桶中。
            //  minioClient.putObject("asiatrip","asiaphotos.zip", "/home/user/Photos/asiaphotos.zip");
            minioClient.putObject(
                    PutObjectArgs.builder().bucket(bucketName).object(fileName).stream(
                                    file.getInputStream(), file.getSize(), -1)
                            .contentType(file.getContentType())
                            .build());
            //  System.out.println("/home/user/Photos/asiaphotos.zip is successfully uploaded as asiaphotos.zip to `asiatrip` bucket.");
            //  文件上传之后的路径: http://39.99.159.121:9000/gmall/xxxxxx
            url = endpointUrl+"/"+bucketName+"/"+fileName;
    
            System.out.println("url:\t"+url);
            //  将文件上传之后的路径返回给页面!
            return Result.ok(url);
        }
    }
    

    图片是前端传过来的,我们用MultipartFile file来接收,上传到minio之后要把生成的路径传给前端页面显示,但是路径也传到了数据库中。

  • 传图片和视频都是差不多的,但是如果视频涉及到断点续传业务的话会有点复杂。

  • 总结:

  • 1.导入minio的依赖

  • 2.写配置文件,四个参数,用@Value注解注入到处理业务的那层

  • 3.创建一个客户端对象,传入参数,再判断有没有这个桶,没有则创建

  • 4.调用putObject方法实现图片的上传

  • 5.返回路径给前端 ps:数据库那里是用一个大的dto。对象存进去啦,上传图片的component也只是表单的一部分,我们传整个表单的。文章来源地址https://www.toymoban.com/news/detail-517045.html

到了这里,关于使用minio实现图片和视频的上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MinIO框架安装使用+实现上传需求

    前置知识:对象存储 MinIO对象存储系统是为海量数据存储、人工智能、大数据分析而设计,基于 Apache License v2.0 开源协议的对象存储系统,它完全兼容 Amazon S3 接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 通常在企业中我

    2024年02月10日
    浏览(35)
  • 使用uni-file-picker上传文件(图片)到腾讯云存储COS步骤

    微信小程序上传文件到腾讯云存储COS: 准备步骤: 1.拿到腾讯云的API密钥:在API密钥管理中获取SecretId和SecretKey,没有的话生成一个 2.开通COS存储创建存储桶,需要拿到存储桶名字和所在地域 3.打开对象存储的产品文档进入SDK文档里的小程序SDK里面有源码下载地址 主要是为了

    2024年02月07日
    浏览(47)
  • MinIO:微服务中上传图片流程

    1、在nacos中配置minio参数  2、controller层 3、接口实现类      封装minio上传工具Minio: 封装MinIO为starter_moreCalm的博客-CSDN博客      获取用户id的前置工作 微服务:从header中获取用户存入当前线程_moreCalm的博客-CSDN博客

    2024年02月14日
    浏览(32)
  • uniapp实现图片和视频上传

    模板部分 js部分 使用 效果展示

    2024年02月03日
    浏览(37)
  • upload上传图片到腾讯云,如何上传图片

    讲解一下如何上传图片到腾讯云,上传到其他第三方云盘操作也是大致一样的; 1.创建一个腾讯云账号,跟着提示操作即可(必须实名-为了安全),中间选择 对象存储cos,这里就创建好了; 2.接下来需要创建存储桶,里面的权限为:公有读,私有写; 3.设置cors规则,AllowHeade

    2023年04月17日
    浏览(39)
  • uniapp集成腾讯即时通信IM,实现一对一聊天,支持文字、表情、语音、图片、视频

    原则 介绍 效果图 uniapp集成腾讯即时通信IM,实现一对一聊天,支持文字、 使用方式 将文件放到相应的位置 app配置 main.js 配置 pages.json 配置 GenerateTestUserSig.js配置SDKAPPID和SECRETKEY 安装 npm i 运行 下载源码 联系方式 查看文章

    2024年02月09日
    浏览(92)
  • Linux下使用Docker部署MinIO存储服务实现远程上传

    本文主要是Linux下通过Docker部署MinIO存储服务实现远程上传的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句:努力一点,优秀一点 前言 MinIO是一个开源的对象存储服务器,可以在各种环

    2024年02月19日
    浏览(41)
  • 09 视频分片上传Minio和播放

    pom.xml application.yml com.example.web.dto.file.FileResp com.example.web.dto.file.MinioObject com.example.utils.FileMd5Util com.example.utils.MinioFileUtil com.example.blh.file.FileBlh com.example.web.rest.file.FileRest HTML效果 http://127.0.0.1:8081/test/upload.html resources/static/upload.html ckplayer ckplayer是一款在网页上播放视频的软件,

    2024年02月04日
    浏览(48)
  • Flask boostrap实现图片视频上传下载展示

    项目目录结构 html js代码 fileinput插件下载地址:https://github.com/kartik-v/bootstrap-fileinput/ imgEnlarge.js如下 代码下载链接:https://download.csdn.net/download/weixin_44986037/87986647

    2024年02月12日
    浏览(43)
  • java实现上传图片或视频到oss中

    当上传图片和视频到OSS时,你可以使用阿里云的Java SDK来实现。以下是一个示例的Java代码,包括图片和视频的上传功能: 在上述代码中,你需要替换以下变量的值: ACCESS_KEY_ID和ACCESS_KEY_SECRET:阿里云的访问密钥,可以在阿里云控制台获取。 BUCKET_NAME:OSS存储桶的名称。 IMA

    2024年02月07日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包