揚州服務器租用seo成都培訓
MinIO 是一種開源的對象存儲服務,它基于云原生架構構建,并提供了高性能、易于擴展和安全的存儲解決方案。
一.安裝和配置 MinIO 服務器
為了演示方便,本文采用Windows安裝?
1.在官方網(wǎng)站下載MinIO 安裝文件,地址:https://dl.minio.org.cn/server/minio/release/windows-amd64/minio.exe;?
2.在minio.exe目錄下創(chuàng)建start.bat配置啟動文件:"D:\Java\MinIo"是服務啟動時文件存放的位置?
minio.exe server D:\Java\MinIo
3.雙擊minio.exe文件啟動
?
4.創(chuàng)建一個 Spring Boot 項目
????????1.創(chuàng)建一個 Spring Boot 項目
????????2.添加依賴,注意依賴版本
<!--文件上傳-->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version>
</dependency>
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version>
</dependency><!--MinIO對象存儲-->
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.4.3</version>
</dependency>
<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.8.1</version>
</dependency>
二.配置文件
? ? ? ? 1.yaml配置文件
#MinIO配置
minio:endpoint: http://127.0.0.01:9000 #連接地址accessKey: minioadmin#賬號 默認minioadminsecretKey: minioadmin#密碼 默認minioadminbucketName: contractfile #桶名 存放合同文件 桶名校驗規(guī)則:!name.matches("^[a-z0-9][a-z0-9\\.\\-]+[a-z0-9]$")
? ? ? ? ?2.配置類,用來連接Minio
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {//連接地址private String endpoint;//賬號 默認minioadminprivate String accessKey;//密碼 默認minioadminprivate String secretKey;@Beanpublic MinioClient minioClient() {MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();return minioClient;}}
? ? ? ? 3.工具類,用來操作文件
@Slf4j
@Component
public class MinioUtils {@Autowiredprivate MinioClient minioClient;@Value("${minio.bucketName}")private String bucketName;/*** 操作文件時先創(chuàng)建Bucket* 如果沒有Bucket則創(chuàng)建** @param bucketName*/@SneakyThrows(Exception.class)public void createBucket(String bucketName) {if (!bucketExists(bucketName)) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());}}/*** 判斷Bucket是否存在,true:存在,false:不存在** @param bucketName* @return*/@SneakyThrows(Exception.class)public boolean bucketExists(String bucketName) {return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());}/*** 判斷文件是否存在** @param bucketName* @param fileRealName* @return*/public boolean isObjectExist(String bucketName, String fileRealName) {boolean exist = true;try {minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(fileRealName).build());} catch (Exception e) {log.error("[Minio工具類]>>>> 判斷文件是否存在, 異常:", e);exist = false;}return exist;}/*** 使用MultipartFile進行文件上傳** @param bucketName 存儲桶* @param file 文件* @param fileRealName 文件名* @return 文件下載外鏈*/@SneakyThrows(Exception.class)public String uploadFile(String bucketName, MultipartFile file, String fileRealName) {createBucket(bucketName);InputStream inputStream = file.getInputStream();minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(fileRealName).contentType(file.getContentType()).stream(inputStream, inputStream.available(), -1).build());GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(fileRealName).method(Method.GET).build();return minioClient.getPresignedObjectUrl(args);}/*** 刪除文件** @param bucketName 存儲桶* @param fileRealName 文件名稱*/@SneakyThrows(Exception.class)public void removeFile(String bucketName, String fileRealName) {createBucket(bucketName);minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileRealName).build());}/*** 下載文件** @param httpServletResponse httpServletResponse* @param fileRealName 文件存儲名稱* @param fileName 文件下載名稱* @throws IOException IOException*/public void downloadFile(String bucketName, String fileRealName, String fileName, HttpServletResponse httpServletResponse) throws Exception {createBucket(bucketName);//獲取文件流InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileRealName).build());//設置響應頭信息,告訴前端瀏覽器下載文件httpServletResponse.setContentType("application/octet-stream;charset=UTF-8");httpServletResponse.setCharacterEncoding("UTF-8");httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));//獲取輸出流進行寫入數(shù)據(jù)OutputStream outputStream = httpServletResponse.getOutputStream();// 將輸入流復制到輸出流byte[] buffer = new byte[4096];int bytesRead = -1;while ((bytesRead = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}// 關閉流資源inputStream.close();outputStream.close();}
}