首页 > 其他分享 >尚品汇-(十)

尚品汇-(十)

时间:2024-07-07 19:58:44浏览次数:11  
标签:文件 存储 Minio 尚品 bucketName 上传 minio

spu的保存功能中的图片上传

(1)MinIo介绍

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

官方文档:http://docs.minio.org.cn/docs 旧一点

https://docs.min.io/

应用场景

1.单主机单硬盘模式

2.单主机多硬盘模式

3.多主机多硬盘分布式

 特点

·  高性能:作为高性能对象存储,在标准硬件条件下它能达到55GB/s的读、35GB/s的写速率

·  可扩容:不同MinIO集群可以组成联邦,并形成一个全局的命名空间,并跨越多个数据中心

·  云原生:容器化、基于K8S的编排、多租户支持

·  Amazon S3兼容:Minio使用Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK和AWS CLI访问Minio服务器。

·  可对接后端存储: 除了Minio自己的文件系统,还支持DAS、 JBODs、NAS、Google云存储和Azure Blob存储。

·  SDK支持: 基于Minio轻量的特点,它得到类似Java、Python或Go等语言的sdk支持

·  Lambda计算: Minio服务器通过其兼容AWS SNS / SQS的事件通知服务触发Lambda功能。支持的目标是消息队列,如Kafka,NATS,AMQP,MQTT,Webhooks以及Elasticsearch,Redis,Postgres和MySQL等数据库。

·  有操作页面

·  功能简单: 这一设计原则让MinIO不容易出错、更快启动

·  支持纠删码:MinIO使用纠删码、Checksum来防止硬件错误和静默数据污染。在最高冗余度配置下,即使丢失1/2的磁盘也能恢复数据!

存储机制

Minio使用纠删码erasure code和校验和checksum。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。

纠删码是一种恢复丢失和损坏数据的数学算法。

(2)docker访问

前面已经进行了安装:

docker pull minio/minio

新版本:

docker run \

  -p 9000:9000 \

  -p 9001:9001 \

  --name minio \

  -d --restart=always \

  -e "MINIO_ROOT_USER=admin" \

  -e "MINIO_ROOT_PASSWORD=admin123456" \

  -v /home/data:/data \

  -v /home/config:/root/.minio \

  minio/minio server /data --console-address ":9001"

浏览器访问:http://IP:9001/minio/login,如图:

说明:安装是指定了登录账号

minio都是往桶里面存数据

注意访问:服务器ip:端口/桶名/文件名(或者点击copy连接访问)

(3)利用Java客户端调用Minio

在service-product模块中添加依赖

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

添加配置文件

在nacos 中配置好了!

minio:
  endpointUrl: http://192.168.254.165:9000
  accessKey: admin
  secreKey: admin123456
  bucketName: gmall

 

创建FileUploadController控制器

package com.atguigu.gmall.product.controller;

@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);
    }
}

保证时间一致

注意:文件上传时,需要调整一下linux 服务器的时间与windows 时间一致!
第一步:安装ntp服务
yum -y install ntp
第二步:开启开机启动服务
systemctl enable ntpd
第三步:启动服务
systemctl start ntpd
第四步:更改时区
timedatectl set-timezone Asia/Shanghai
第五步:启用ntp同步
timedatectl set-ntp yes
第六步:同步时间

ntpq -p

前端上传组件:

 

 

 

标签:文件,存储,Minio,尚品,bucketName,上传,minio
From: https://blog.csdn.net/dengfengling999/article/details/140110707

相关文章

  • 尚品汇-(一)
    (1)技术介绍(2)业务介绍 (3)虚拟机安装可以稍后配置镜像:选第二个 采用第二项NET模式: 安装完成:开启 不选择界面的,选择基础的  分配了ip:测试网络 为了防止出现问题:可以设置快照:保存虚拟机快照配置静态ip:......
  • 解决尚品甄选验证码图片无法显示bug
    按照他的视频要求去做发现图片无法正常显示,通过查看浏览器网络错误,发现请求验证码的网址是重叠的http://localhost:3001/admin/system/index/login/admin/system/index/generateValidateCode是这样的,说明baseUrl是/admin/system/index/login导致的,所以我对前端文件api/login.js......
  • 生成式人工智能:释放时尚品牌潜力的关键
    探讨生成式人工智能(GenerativeAI)在时尚产业中的应用,以及它对设计、生产和销售过程的影响。通过使用生成式AI技术,时尚品牌可以更快地设计和生产出更加个性化和符合潮流趋势的产品,同时减少浪费和成本。文章还介绍了几个成功的案例。然而生成式AI技术仍然存在一些挑战和数据隐私等......
  • 解锁生成式人工智能:时尚品牌企业的6大机遇领域
    探讨生成式人工智能(GenerativeAI)在时尚产业中的应用,以及它对设计、生产和销售过程的影响。通过使用生成式AI技术,时尚品牌可以更快地设计和生产出更加个性化和符合潮流趋势的产品,同时减少浪费和成本。文章还介绍了几个成功的案例。然而生成式AI技术仍然存在一些挑战和数据隐私等......
  • Vue2项目实战尚品汇 项目的路由分析
    视频5)路由的配置vue-router路由分为KVnode平台(并非语言)对于后台而言:K即为URL地址V即为相应的中间件http://localhost:8080/0607app.get("/0607",(res,req)=>{res.send('我是祖国的老花骨朵');});前端路由:K即为URL(网络资源定位符)V即为相应的路由组件5.1路由的一......
  • 尚硅谷-尚品汇笔记
    Author:gavin视频地址P35swiper基本使用快速生成轮播图步骤执行npmi-Sswiper@5,添加swiper库,因为6可能有bug,所以用5,引包(css),在main.js中引入impor......
  • 尚品宅配:最互联网的定制家居增长新势力,如何三招实现疫情期的逆势增长?
    疫情之下家装行业难做。每每在搜索引擎输入家装或装修的字样,你就会看到令人苦笑不得的关联词条:“开装修公司就是找死”“家装行业太难了”……2018年下半年开始,中国家装......
  • 尚品汇笔记(前台-day2)
    犯的错误:1:项目阶段,左侧菜单目录,只能有项目文件夹2:联想电脑安装node_modules依赖包的时候,经常丢包。npminstall--saveaxios--force3:单词错误4:路由理解KV:K--->UR......
  • 尚品汇笔记(前台)
    1)要求1.1:每一天老师书写代码务必三遍1.2:node+webpack+VScode+谷歌浏览器+git1.3:数组的方法+promise+await+async+模块化........2)脚手架使用2:v......
  • 尚品汇前台管理项目:未登录情况下访问购物车,登录账号后页面不更新问题解决方案
    问题描述:如果用户未登录状态下通过首页访问【我的购物车】,点击【结算】,跳转登录页面后,即使输入正确的账号和密码获取到用户信息后,地址栏路径和页面也不会更新,从【我的订......