公司的開發框架集成了附件本地存儲,阿里雲,華為雲等,現項目有要求附件存儲與應用部署環境不能是同一台服務器,也不能使用雲存儲,經過技術選用後決定框架整合minio,將minio部署在另一台伺服器開通外網連接埠即可解決問題
下載minio安裝部署包,建立對應設定檔,這裡提供一個整合後的壓縮包
下載位址:http://xiazai.jb51.net/202204/yuanma/minio_jb51.rar
#建立minioData資料夾作為檔案儲存路徑,解壓縮安裝包根據放置路徑修改對應設定檔檔
minio-service.xml和run.bat
<service> <id>minio</id> <name>MinIO Service</name> <description>MinIO is a High Performance Object Storage</description> <logpath>D:\minio\logs</logpath> <log mode="roll-by-size"> <sizeThreshold>10240</sizeThreshold> <keepFiles>8</keepFiles> </log> <executable>D:\minio\run.bat</executable> </service>
set MINIO_ACCESS_KEY=admin set MINIO_SECRET_KEY=abcd@1234 minio.exe server -address :9999 D:\minioData
解壓縮部署套件後cmd進入對應解壓縮路徑,輸入指令minio.exe server D :\minioData 初始化後關閉cmd指令
使用服務安裝工具安裝服務,選擇minio-service.exe
windows服務安裝工具下載位址:http://xiazai.jb51.net/ 202204/yuanma/windowsfuwu_jb51.rar
啟動服務後訪問http://127.0.0.1:9999/
使用者名稱:admin 密碼:abcd@1234 (連接埠及帳戶密碼都在run.bat檔案中設定的)
進入系統建立bucket用於儲存檔案(類似阿里雲)
<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>7.1.0</version> </dependency>
這裡分別設定上傳/下載位址是正式專案可能設定外網連接埠後,伺服器中不能存取對應的外網端口,並上傳走內網,下載走外網
#minio配置 # 上传地址 minio_uploadurl: http://192.168.1.42:9999/ # 下载地址 minio_downloadurl: http://192.168.1.42:9999/ # 账户 minio_accesskey: admin # 密码 minio_secrectkey: abcd@1234 # 存储文件夹 minio_bucknetname: xxx
public MinioClient InitMinio() { MinioClient minioClient = MinioClient.builder(). endpoint(frameConfig.getMinio_uploadurl()). credentials(frameConfig.getMinio_accesskey(),frameConfig.getMinio_secrectkey()).build(); try{ boolean isExist = minioClient.bucketExists(frameConfig.getMinio_bucknetname()); if (!isExist) { minioClient.makeBucket(frameConfig.getMinio_bucknetname()); } }catch (Exception e){ e.printStackTrace(); } return minioClient; }
getkey方法只是指定對應的自訂儲存路徑
#指定content-type是為了瀏覽器能開啟附件時,圖片和pdf等檔案能夠在線上瀏覽
不指定預設都是stream,開啟檔案統一為下載
public boolean uploadMinioFile(InputStream stream, AttachmentDO attachmentDO,String contentType){ boolean result = true; try{ MinioClient minioClient = InitMinio(); String bucketName =frameConfig.getMinio_bucknetname(); PutObjectOptions option = new PutObjectOptions(stream.available(), -1); option.setContentType(contentType); minioClient.putObject(bucketName,getKey(attachmentDO),stream,option); }catch (Exception e){ logger.error("Minio上传文件失败:" + e.getMessage()); result = false; } return result; }
要注意的是,產生的檔案下載位址是和MinioClient中指定的伺服器位址綁定的,使用nginx代理程式後是無效的
public String readMinioCommonFile(AttachmentDO attachmentDO){ String fileurl = ""; try{ MinioClient minioClient = InitMinio(); String bucketName =frameConfig.getMinio_bucknetname(); return minioClient.presignedGetObject(bucketName, getKey(attachmentDO)); }catch (Exception e){ logger.error("Minio读取文件失败:" + e.getMessage()); } return fileurl; }
public boolean deleteMinioFile(AttachmentDO attachmentDO){ boolean result = true; try{ MinioClient minioClient = InitMinio(); String bucketName =frameConfig.getMinio_bucknetname(); minioClient.removeObject(bucketName,getKey(attachmentDO)); }catch (Exception e){ logger.error("Minio删除文件失败:" + e.getMessage()); result = false; } return result; }
以上是SpringBoot怎麼整合Minio檔案存儲的詳細內容。更多資訊請關注PHP中文網其他相關文章!