zoukankan      html  css  js  c++  java
  • Minio HTTP 远程调用上传文件

    1,客户端

    1,如果你拿到的是byte,需要转成  MultipartFile ,方法如下

    byte[] data =  xxxxxxxxxx;
    InputStream inputStream = new ByteArrayInputStream(data);
    MultipartFile file = new MockMultipartFile(filename,filename2,"image/jpeg", inputStream);

    上面的需要引入maven

    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>RELEASE</version>
        </dependency>

    2,如果你拿到的是 File或者MultipartFile(File需要转成MultipartFile),可以直接调用

    RestTemplate template = new RestTemplate();
    String url = "http://127.0.0.1:9999/minio/upload_url";
    MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
    paramMap.add("file", file.getResource());
    paramMap.add("boot", "robot");
    paramMap.add("path", "/face/tttt/tttt/");
    result = template.postForObject(url, paramMap, String.class);

    2,服务端

    controller

    package com.example.miniojava.controller;
    
    import com.example.miniojava.service.MinioService;
    import com.example.miniojava.service.MinioServiceImpl;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    
    @RestController
    @RequestMapping("/minio")
    public class MinioController {
    
        /*@Value("${server.port}")
        private String port;*/
    
        @Autowired
        private MinioService minioService;
    
        @PostMapping("/upload_url")
        public String upload_url(MultipartFile file,String boot,String path) {
            if (boot==null || boot.equals("")) return "桶不能为空";
            return  minioService.uploadFile_url(file,boot,path);
        }
    
    }

    MinioServiceImpl

    @Service("MinioService")
    public class MinioServiceImpl implements MinioService {
        MinioClient minioClient = MinioStarts.minioClientInit();
        MinioClient minioClient2 = MinioStarts.minioClientInit2();
    
    
    /**
         * 文件上传 能返回图片
         * @param file web上传文件接收的参数
         * @param path 文件路径
         * @return
         */
        public String uploadFile_url(MultipartFile file, String boot, String path) {
            try {
                //随机娶一个
                if ((Math.random()>0.5?1:0)==0){
    
                    // 检查存储桶是否已经存在
                    boolean isExist = minioClient.bucketExists(boot);
                    if(isExist) {
                        System.out.println("桶已存在通过,执行插入,minio1");
                    } else {
                        // 创建一个名为asiatrip的存储桶,用于存储照片的zip文件。
                        minioClient.makeBucket(boot);
                    }
    
                    InputStream in = file.getInputStream();
                    String fileName = file.getOriginalFilename();//generalFileName(file.getOriginalFilename());
                    //minioClient.putObject(boot,path+fileName, file.getInputStream(),file.getContentType());
                    if (path!=null && !path.equals("null") && !path.equals("")){
                        minioClient.putObject(boot,path+fileName, file.getInputStream(),file.getContentType());
                        String aaaa = minioClient.presignedGetObject(boot,path+fileName);
                        //替换域名
                        aaaa = aaaa.replaceAll("http://127.0.0.1:9000/","https://xxxx.xxxx.com/");
                        String[] resMax = aaaa.split("\?");  //minio配置永久不过期后截取?不要后面那一截
                        return  resMax[0];
                        //return initParam.get("url")+"/"+path+boot+"/"+fileName;
                    }else{
                        minioClient.putObject(boot,fileName, file.getInputStream(),file.getContentType());
                        String aaaa = minioClient.presignedGetObject(boot,fileName);
                        aaaa = aaaa.replaceAll("http://127.0.0.1:9000/","https://xxxx.xxxx.com/");
                        String[] resMax = aaaa.split("\?");  //minio配置了永久不过期后拿到的返回地址不要?后面那一截
                        return  resMax[0];
                    }
    
    
                }else{
                   //第二个minio,用来减轻服务器压力 一样的代码,服务器不同
                }
            } catch (Exception e) {
                e.printStackTrace();
                return "false";
            }
        }

    3,minio初始化

    package com.example.miniojava.util;
    
    import io.minio.MinioClient;
    import io.minio.errors.*;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.xmlpull.v1.XmlPullParserException;
    
    import java.io.File;
    import java.io.IOException;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * yxp
     * 2021年4月30日17:55:21
     */
    @Configuration
    public class MinioStarts {
    
        /**
         * 初始化minio的客户端
         * @return
         */
        @Bean
        public static MinioClient minioClientInit() {
            try {
                return new MinioClient("http://127.0.0.1:9000","用户名","密码");
                //return new MinioClient(minioUrl,minioUserName,minioPassWord);
            } catch (InvalidEndpointException e) {
                e.printStackTrace();
            } catch (InvalidPortException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    zzzzzzzzzzzz
  • 相关阅读:
    找一个数组的最大和的连续子数组(时间复杂度 O(n))
    Web版需求征集系统所得2,servlet中request.getParameter获值乱码问题解决
    Web版需求征集系统所得1,servlet中获取checkbox复选框的值
    人月神话读后感(三)
    Web版记账本开发记录(三)开发过程遇到的问题小结2
    人月神话读后感(二)
    团队开发项目--校园知网 nabcd 需求分析
    软件工程--第六周学习进度
    软件工程--第五周学习进度
    人月神话阅读笔记03
  • 原文地址:https://www.cnblogs.com/ymlyxp/p/15325432.html
Copyright © 2011-2022 走看看