package com.kmall.common.fileserver.minio; import com.alibaba.fastjson.JSONObject; import com.kmall.common.utils.SpringContextUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.Resource; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; public class MinIOUtils { private static volatile String host = null; private static volatile String baseApi = null; private static volatile boolean inited = false; private static final Logger log = LoggerFactory.getLogger(MinIOUtils.class); private static final RestTemplate restTemplate = new RestTemplate(); private static String buildUrl(String uri) { return getBaseUrl() + uri; } private static String getBaseUrl() { if (!inited) { synchronized (MinIOUtils.class) { if (!inited) { Environment env = SpringContextUtils.getBean(Environment.class); try { String profiles = env.getActiveProfiles()[0]; if ("dev".equals(profiles)) { host = "http://127.0.0.1:9393"; baseApi = "/dev-api"; } else if ("test".equals(profiles)) { host = "http://3f352e8584.qicp.vip:9393"; baseApi = "/test-api"; } else if ("prod".equals(profiles)) { host = "http://3f352e8584.qicp.vip:9393"; baseApi = "/prod-api"; } else { host = "http://3f352e8584.qicp.vip:9393"; baseApi = "/prod-api"; } } catch (Exception e) { host = "http://3f352e8584.qicp.vip:9393"; baseApi = "/prod-api"; } inited = true; } } } return host + baseApi; } public static FileInfo upload(MultipartFile file) throws IOException { String url = buildUrl(EOSSProperties.uploadUri); MediaType mediaType = MediaType.MULTIPART_FORM_DATA; HttpHeaders headers = new HttpHeaders(); headers.setContentType(mediaType); MultiValueMap body = new LinkedMultiValueMap<>(); Resource resource = new ByteArrayResource(file.getBytes(), file.getName()) { @Override public String getFilename() { return file.getOriginalFilename(); } }; body.set("file", resource); HttpEntity> httpEntity = new HttpEntity<>(body, headers); ResponseEntity stringResponseEntity = restTemplate.postForEntity(url, httpEntity, String.class); String responseBody = stringResponseEntity.getBody(); JSONObject result = JSONObject.parseObject(responseBody); log.info("upload file result {}", result); JSONObject dataJsonObject = result.getJSONObject("data"); FileInfo data = dataJsonObject.getJSONArray("rows").getObject(0, FileInfo.class); return data; } }