minio 使用docker安装和入门案例demo

简介: minio 使用docker安装和入门案例demo


目录

公司目前用到文件上传,考虑到费用等情况,可以在公司自己的服务器上搭建一下。本人记录minio的使用情况。

“前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。

1.安装

docker run -p 9000:9000 -p 9090:9090 \
 --name minio \
 -d --restart=always \
 -e "MINIO_ROOT_USER=minioadmin" \
 -e "MINIO_ROOT_PASSWORD=minioadmin" \
 -v /mydata/minio/data:/data \
 minio/minio server \
 /data --console-address ":9090" -address ":9000"

MinIO 部署开始使用默认的根凭据minioadmin:minioadmin。您可以使用 MinIO 控制台测试部署,这是一个内置于 MinIO 服务器的嵌入式对象浏览器。将主机上运行的 Web 浏览器指向http://127.0.0.1:9000并使用根凭据登录。您可以使用浏览器创建存储桶、上传对象以及浏览 MinIO 服务器的内容。

注意:要使用持久存储部署 MinIO,您必须使用该podman -v选项将本地持久目录从主机操作系统映射到容器。例如,-v /mnt/data:/data将主机操作系统驱动器映射/mnt/data到/data容器上。

要覆盖MinIO的自动生成的密钥,您可以将Access和Secret密钥设为环境变量。 MinIO允许常规字符串作为Access和Secret密钥。

/mydata/minio/data // 数据卷存放路径(自行添加)

2.页面web访问

浏览器中访问

http:ip/9000 或者 http:ip/9090 都可以。

密码就是:

-e “MINIO_ROOT_USER=minioadmin

-e “MINIO_ROOT_PASSWORD=minioadmin” \

docker启动时时候指定的 。

3.在界面上传

  • 先创建个bucket。

  • 点击上传

    列表的文件是我刚上传的。900多M差不多几十秒上传完毕。

4.使用api上传

@PostMapping(value = {"/uploadFile"})
    @ApiOperation(value = "上传文件,支持批量上传")
    @ApiImplicitParam(name = "files",value = "文件对象",dataType = "File")
    public ApiResult uploadFile(@RequestParam("files") List<MultipartFile> files) {
        log.info(files.toString());
        if (CollectionUtils.isEmpty(files)) {
            return ApiResult.error("未选择文件!");
        }
        List<MinioResponseDTO> MinioResponseDTOList = new ArrayList<>();
        for (MultipartFile file : files) {
            String originalFilename = file.getOriginalFilename();
//            获取文件拓展名
            String extName = FileUtil.extName(originalFilename);
            log.info("文件拓展名:" + extName);
//            生成新的文件名,存入到minio
            long millSeconds = Instant.now().toEpochMilli();
            String minioFileName = millSeconds + RandomStringUtils.randomNumeric(12) + "." + extName;
            String contentType = file.getContentType();
            log.info("文件mime:{}", contentType);
//            返回文件大小,单位字节
            long size = file.getSize();
            log.info("文件大小:" + size);
            try {
                String bucketName = minioConfig.getBucketName();
                minioClientUtils.putObject(bucketName, file, minioFileName);
                String fileUrl = minioClientUtils.getObjectUrl(bucketName, minioFileName);
                MinioFile minioFile = new MinioFile();
                minioFile.setOriginalFileName(originalFilename);
                minioFile.setFileExtName(extName);
                minioFile.setFileName(minioFileName);
                minioFile.setFileSize(size);
                minioFile.setMime(contentType);
                minioFile.setIsDelete(NumberUtils.INTEGER_ZERO);
                minioFile.setFileUrl(fileUrl);
                boolean insert = minioFile.insert();
                if (insert) {//文件地址写入数据库
                    MinioResponseDTO minioResponseDTO = new MinioResponseDTO();
                    minioResponseDTO.setFileId(minioFile.getId());
                    minioResponseDTO.setOriginalFileName(originalFilename);
                    minioResponseDTO.setFileUrl(fileUrl);
                    MinioResponseDTOList.add(minioResponseDTO);
                }
            } catch (Exception e) {
                log.error("上传文件出错:{}", e);
                return ApiResult.error("上传文件出错");
            }
        }
        return ApiResult.success(MinioResponseDTOList);
    }

5.使用api下载

@GetMapping("/download")
    @ApiOperation(value = "下载文件")
    public void downloadFile(@RequestParam("fileUrl") String fileUrl, HttpServletResponse response) throws IOException {
        if (StringUtils.isBlank(fileUrl)){
            response.setHeader("Content-type","text/html;charset=UTF-8");
            String msg = "文件下载失败";
            OutputStream ps = response.getOutputStream();
            ps.write(msg.getBytes(StandardCharsets.UTF_8));
            return;
        }
        try {
            //拿到文件路径
            String url = fileUrl.split("9000/")[1];
            //获取文件对象
            InputStream object = minioClientUtils.getObject(MinioConstant.FSP_DEV, url.substring(url.indexOf("/") + 1));
            byte[] bytes = new byte[1024];
            int len = 0;
            response.reset();
            response.setHeader("Content-Disposition","attachment/filename="+
                    URLEncoder.encode(url.substring(url.lastIndexOf("/")+1),"UTF-8"));
            response.setContentType("application/octet-stream");//将文件下载到浏览器
//            response.setContentType("image/jpeg");//浏览器直接展示图片
            response.setCharacterEncoding("UTF-8");
            OutputStream stream = response.getOutputStream();
            while ((len = object.read(bytes))>0){
                stream.write(bytes,0,len);
            }
            stream.close();
        }catch (Exception e){
            response.setHeader("Content-type","text/html;charset=UTF-8");
            String data = "文件下载失败";
            OutputStream ps = response.getOutputStream();
            ps.write(data.getBytes(StandardCharsets.UTF_8));
        }
    }

直接在浏览器输入 :

http://localhost:8081/download?fileUrl=http://192.168.196.100:9000/fsp-dev/1675150054071022817109203.csv

源码地址:

https://github.com/hufanglei/minio-demo.git


大功告成,完!!

相关文章
|
1天前
|
Ubuntu Shell Docker
在Docker环境下如何“安装”Ubuntu
【8月更文挑战第18天】在Docker环境中“安装”Ubuntu实际上是指利用Ubuntu镜像构建容器。
13 1
|
4天前
|
存储 Ubuntu Linux
如何安装和使用 Docker:入门指南
如何安装和使用 Docker:入门指南
28 1
|
4天前
|
存储 关系型数据库 Linux
在CentOS 7上安装和使用Docker的方法
在CentOS 7上安装和使用Docker的方法
28 1
|
4天前
|
Ubuntu Shell 应用服务中间件
在Ubuntu 14.04上安装和使用Docker Compose的方法
在Ubuntu 14.04上安装和使用Docker Compose的方法
11 1
|
4天前
|
Linux Docker 容器
在CentOS操作系统上使用yum安装/使用/卸载Docker容器引擎
在CentOS操作系统上安装、配置、使用和卸载Docker容器引擎的详细步骤,包括配置Docker镜像加速的方法。
25 0
|
4天前
|
Ubuntu Linux 测试技术
在Ubuntu 18.04上安装Docker Compose的方法
在Ubuntu 18.04上安装Docker Compose的方法
20 0
|
4天前
|
Ubuntu Linux 持续交付
在Ubuntu 16.04上安装Docker Compose的方法
在Ubuntu 16.04上安装Docker Compose的方法
7 0
|
数据安全/隐私保护 Docker 容器
docker版Minio接入LDAP
因为官网的LDAP文档接入写的过于分散,实在不利于新手部署,所以重新整理了一版,方便用户能一次部署完成
1970 1
docker版Minio接入LDAP
|
4天前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
|
1天前
|
Docker 容器