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
原文地址:https://www.cnblogs.com/ymlyxp/p/15325432.html