package com.panzhihua.applets.config;
|
|
import com.panzhihua.common.utlis.DateUtils;
|
import io.minio.MinioClient;
|
import io.minio.ObjectStat;
|
import org.apache.commons.io.IOUtils;
|
import org.bouncycastle.util.encoders.Base64;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.*;
|
import java.net.URLEncoder;
|
import java.util.UUID;
|
|
/**
|
* program 攀枝花智慧社区项目 description minio工具类
|
*
|
* @author manailin Date 2021-08-19 15:30
|
**/
|
@Component
|
@EnableConfigurationProperties(MinioConfig.class)
|
public class MinioUtil {
|
|
@Resource
|
private MinioConfig minioProperties;
|
|
public static byte[] toByteArray(InputStream input) throws IOException {
|
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
byte[] buffer = new byte[4096];
|
int n = 0;
|
while (-1 != (n = input.read(buffer))) {
|
output.write(buffer, 0, n);
|
}
|
return output.toByteArray();
|
}
|
|
/**
|
* 文件上传
|
*
|
* @param file 要上传的文件
|
* @return
|
*/
|
public String upload(MultipartFile file, String name) {
|
if (null != file) {
|
try {
|
UUID uuid = UUID.randomUUID();
|
StringBuilder s = new StringBuilder();
|
s.append(DateUtils.getCurrentDateyymd()).append("-original").append("/");
|
MinioClient minioClient = new MinioClient(minioProperties.getHost(), minioProperties.getAccessKey(),
|
minioProperties.getSecretKey());
|
// bucket 不存在,创建
|
if (!minioClient.bucketExists(minioProperties.getBucket())) {
|
minioClient.makeBucket(minioProperties.getBucket());
|
}
|
// 得到文件流
|
InputStream input = file.getInputStream();
|
// 文件名
|
// String fileName = uuid + "/images." + FilenameUtils.getExtension(file.getOriginalFilename());
|
String fileName = s.append(name).toString();
|
String contentType = file.getContentType();
|
minioClient.putObject(minioProperties.getBucket(), fileName, input, contentType);
|
StringBuilder fileUrl = new StringBuilder(minioProperties.getUrl());
|
String url = fileUrl.append(fileName).toString();
|
return url;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
return null;
|
}
|
|
/**
|
* 文件上传
|
*
|
* @param input
|
* 要上传的文件
|
* @return
|
*/
|
public String uploadInputStream(InputStream input, String name) {
|
if (null != input) {
|
try {
|
UUID uuid = UUID.randomUUID();
|
StringBuilder s = new StringBuilder();
|
s.append(DateUtils.getCurrentDateyymd()).append("/");
|
MinioClient minioClient = new MinioClient(minioProperties.getHost(), minioProperties.getAccessKey(),
|
minioProperties.getSecretKey());
|
if (!minioClient.bucketExists(minioProperties.getBucket())) {
|
minioClient.makeBucket(minioProperties.getBucket());
|
}
|
String fileName = s.append(name).toString();
|
minioClient.putObject(minioProperties.getBucket(), fileName, input, "application/octet-stream");
|
StringBuilder fileUrl = new StringBuilder(minioProperties.getUrl());
|
String url = fileUrl.append(fileName).toString();
|
return url;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
return null;
|
}
|
/**
|
* 文件上传
|
*
|
* @param file 要上传的文件
|
* @return
|
*/
|
public String uploadRetFileName(MultipartFile file, String name) {
|
if (null != file) {
|
try {
|
UUID uuid = UUID.randomUUID();
|
StringBuilder s = new StringBuilder();
|
s.append(DateUtils.getCurrentDateyymd()).append("-original").append("/");
|
MinioClient minioClient = new MinioClient(minioProperties.getHost(), minioProperties.getAccessKey(),
|
minioProperties.getSecretKey());
|
// bucket 不存在,创建
|
if (!minioClient.bucketExists(minioProperties.getBucket())) {
|
minioClient.makeBucket(minioProperties.getBucket());
|
}
|
// 得到文件流
|
InputStream input = file.getInputStream();
|
// 文件名
|
// String fileName = uuid + "/images." + FilenameUtils.getExtension(file.getOriginalFilename());
|
String fileName = s.append(name).toString();
|
String contentType = file.getContentType();
|
minioClient.putObject(minioProperties.getBucket(), fileName, input, "application/octet-stream");
|
StringBuilder fileUrl = new StringBuilder(minioProperties.getUrl());
|
String url = fileUrl.append(fileName).toString();
|
return fileName;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
return null;
|
}
|
|
/**
|
* 文件上传
|
*
|
* @param file 要上传的文件
|
* @return
|
*/
|
public String uploadFile(File file, String name) {
|
if (null != file) {
|
try {
|
StringBuilder s = new StringBuilder();
|
s.append(DateUtils.getCurrentDateyymd()).append("/");
|
MinioClient minioClient = new MinioClient(minioProperties.getHost(), minioProperties.getAccessKey(),
|
minioProperties.getSecretKey());
|
// bucket 不存在,创建
|
if (!minioClient.bucketExists(minioProperties.getBucket())) {
|
minioClient.makeBucket(minioProperties.getBucket());
|
}
|
// 得到文件流
|
InputStream input = new FileInputStream(file);
|
// 文件名
|
// String fileName = uuid + "/images." + FilenameUtils.getExtension(file.getOriginalFilename());
|
String fileName = s.append(name).toString();
|
minioClient.putObject(minioProperties.getBucket(), fileName, input, "");
|
StringBuilder fileUrl = new StringBuilder(minioProperties.getUrl());
|
String url = fileUrl.append(fileName).toString();
|
return url;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
return null;
|
}
|
|
/**
|
* 文件下载
|
*
|
* @param response
|
* @param url
|
*/
|
public void download(HttpServletResponse response, String url) {
|
// 从链接中得到文件名
|
String replace = url.replace(minioProperties.getBucket() + "/", "#");
|
String fileName = replace.split("#")[1];
|
InputStream inputStream;
|
try {
|
MinioClient minioClient = new MinioClient(minioProperties.getHost(), minioProperties.getAccessKey(),
|
minioProperties.getSecretKey());
|
ObjectStat stat = minioClient.statObject(minioProperties.getBucket(), fileName);
|
inputStream = minioClient.getObject(minioProperties.getBucket(), fileName);
|
response.setContentType(stat.contentType());
|
response.setCharacterEncoding("UTF-8");
|
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
IOUtils.copy(inputStream, response.getOutputStream());
|
inputStream.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
}
|
|
/**
|
* 文件下载
|
*
|
* @param response
|
* @param url
|
*/
|
public byte[] getBytes(HttpServletResponse response, String url) {
|
// 从链接中得到文件名
|
String replace = url.replace(minioProperties.getBucket() + "/", "#");
|
String fileName = replace.split("#")[1];
|
InputStream inputStream;
|
byte[] bytes = new byte[0];
|
try {
|
MinioClient minioClient = new MinioClient(minioProperties.getHost(), minioProperties.getAccessKey(),
|
minioProperties.getSecretKey());
|
inputStream = minioClient.getObject(minioProperties.getBucket(), fileName);
|
bytes = toByteArray(inputStream);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return bytes;
|
}
|
|
|
/**
|
* 删除
|
*
|
* @param fileName
|
* @return
|
* @throws Exception
|
*/
|
public String removeMinio(String fileName) {
|
try {
|
//创建MinioClient对象
|
//fileName = "6edbdf8c2a1146ddaf4fbfcb30f804ad/72b2a44c18a54802854931a65b604576.jpg"
|
MinioClient minioClient = new MinioClient(minioProperties.getHost(), minioProperties.getAccessKey(),
|
minioProperties.getSecretKey());
|
minioClient.removeObject(minioProperties.getBucket(), fileName);
|
return "success";
|
} catch (Exception e) {
|
e.printStackTrace();
|
return e.getMessage();
|
}
|
|
}
|
|
public InputStream base64StrToInputStream(String base64string) {
|
ByteArrayInputStream stream = null;
|
try {
|
byte[] bytes = Base64.decode(base64string);
|
stream = new ByteArrayInputStream(bytes);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return stream;
|
}
|
}
|