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
  • 相关阅读:
    PostgreSQL备份工具-pg_probackup
    Multi-Master Replication Solutions for PostgreSQL
    PostgreSQL高可用:多主复制解决方案
    Postgressql高可用(pgpool+异步流复制)转
    AudioFlinger
    GPIO口配置为上拉,下拉输入
    转【Qualcomm高通音频】音效调试_录音文件播放有杂音,如何定位原因?
    转【Qualcomm高通音频】如何使用QXDM、QCAT、CoolEditor音频日志抓取、解析和分析?
    转【Qualcomm高通音频】调试工具QACT_如何新增一套音效
    转【Qualcomm高通音频】调试工具QACT_如何更换音效的音频拓扑
  • 原文地址:https://www.cnblogs.com/ymlyxp/p/15325432.html
Copyright © 2011-2022 走看看