次のようにビルド記事、整頓minioバックエンドの使用記事へMinio環境に続き、主な手順は次のとおりです。
- 1.ジャーパッケージ、Gradleの方法をご紹介:
':丹:io.minio 5.0.2' コンパイル
- サービスBeanを書きます
1 @Service 2 @ SLF4J 3 パブリック クラスMinioService { 4 5 プライベートMinioClient minioClient。 6 7 プライベート使ってMimetypesFileTypeMapてMimetypesFileTypeMap。 8 9 10 @value( "$ {minio.address}" ) 11の プライベート文字列のアドレス。 12 13 @value( "$ {minio.accessKey}" ) 14 プライベート文字列アクセスキー。 15 16 @value( "$ {minio.secretKey}" ) 17 プライベート文字列秘密鍵。 18 19 パブリック文字列のgetContentType(文字列filename)で{ 20 であれば(てMimetypesFileTypeMap == NULL ){ 21 使ってMimetypesFileTypeMap = 新しいてMimetypesFileTypeMap()。 22 } 23 リターンmimetypesFileTypeMap.getContentType(filename)で。 24 } 25 @PostConstruct 26 プライベート ボイドのinit()スロー例外{ 27 minioClient = 新しいMinioClient(アドレス、アクセスキー、秘密鍵)を、 28 } 29 30 公衆MinioClient getMinioClient(){ 31 リターン この.minioClient。 32 } 33 公衆ストリングのgetContentType(文字列filename)で{ 34 であれば(てMimetypesFileTypeMap == NULL ){ 35 使ってMimetypesFileTypeMap = 新しいてMimetypesFileTypeMap()。 36 } 37 リターンmimetypesFileTypeMap.getContentType(filename)で。 38 } 39 40 公衆MinioFile getBucketFromUrl(文字列のURL){ 41 文字列[]スプリット= url.split( "/" )。 42 もし(split.length <3 ){ 43 投 新規のRuntimeException( "getBucketFromUrl:URL" + URL + "フォーマットが正しくありません" )。 44 } 45 のStringBuilderのStringBuilder = 新規のStringBuilder(); 46 のために(INT I 2 =; I <split.length; I ++ ){ 47 stringBuilder.append(スプリットは、[I])。 48 の場合(I = split.length - 1!){ 49 stringBuilder.append( "/" ); 50 } 51 } 52 列fileNameに=stringBuilder.toString(); 53 リターン 新しい MinioFile(スプリット[1 ]は、ファイル名)。 54 } 55 56 }
- 書き込み、ファイルアップロードサービス
パブリック クラスUploadService { @Autowired MinioService minioService。 パブリック文字列uploadFile(MultipartFileファイル、文字列型)がスローIOExceptionが、例外:InvalidKeyException、持つNoSuchAlgorithmException、InsufficientDataException、InvalidArgumentException、InternalException、NoResponseException、InvalidBucketNameException、XmlPullParserException、ErrorResponseException、ParameterException { 文字列fileUrlと、 MinioClient minioClient = minioService.getMinioClient()。 バイト [] =含むFileContent file.getBytes()。 バイト [] encodeBase64 =org.apache.commons.codec.binary.Base64.encodeBase64(含むFileContent)。 文字列base64Encode = 新しい文字列(encodeBase64、 "UTF-8" ); ストリングoriginalFilename = file.getOriginalFilename()。 文字列のcontentType = minioService.getContentType(originalFilename)。 文字列のサフィックス = UploadUtil.getFileSuffix(originalFilename)。 ストリングUUID = CommonUtil.getUUID()。 もし(!UploadUtil.isFileTypeSupport(接尾辞)){ スロー 新しい ParameterExceptionを( "ファイルの種類がサポートではありません" ); } ストリングcurrentDay = CommonUtil.getCurrentDayStr()。 文字列fileNameに =タイプ+ "/" + currentDay + "/" + UUID + "" + 接尾辞; log.info( "------------------アップロードの前に" ); InputStream InputStreamは = 新しいれるByteArrayInputStream(base64Encode.getBytes()); minioClient.putObject(MinioType.BUCKET_RIOファイル名値、INPUTSTREAM、のcontentType)。 (log.info "アップロード----------------" ); fileUrl = "/" + MinioType.BUCKET_RIO + "/" + ファイル名; 返すfileUrlを。 } パブリック応答downloadFile(DownLoadBean豆){ MinioClient minioClient = minioService.getMinioClient()。 InputStream = nullを。 文字列fileStr = nullを。 文字列のobjectName = "" ; 試す{ 文字列[] minioInfo = bean.getFileUrl()スプリット( "/"、-1 ); もし(minioInfo.length == 4 ){ objectNameの = minioInfo [2] + "/" + minioInfo [3 ]。 } 他{ objectNameの= minioInfo [2] + "/" + minioInfo [3] + "/" + minioInfo [4 ]。 } で = minioClient.getObject(minioInfo [1 ]、objectNameの); アウトByteArrayOutputStream = 新しいByteArrayOutputStream(); int型私= 0 ; 一方、(!(iはin.read =())= -1 ){ out.write(I)。 } fileStr = out.toString()。 } キャッチ(例外e){ log.error(e.getMessage()、E)。 } 最後に{ CloseableUtils.closeQuietly(IN) } 戻りResponse.success(fileStr)を、 } }
- あなたはこのクラスを使用して、テンポラリ・テーブルにアップロードする必要がある場合は、それが汚れている場合、あなたはクリーンアップするために、次の定期的なタスクを使用することができ、データminioサーバーを追跡キャッチすることができます
@Service @ SLF4J @Transactional(rollbackFor =例外クラス) パブリック クラスPicTempService { @Autowired MinioService minioService。 @Autowired プライベートPicTempDao tempDao。 パブリック文字列uploadPic(MultipartFileファイル、文字列型)がスローIOExceptionが、例外:InvalidKeyException、持つNoSuchAlgorithmException、InsufficientDataException、InvalidArgumentException、InternalException、NoResponseException、InvalidBucketNameException、XmlPullParserException、ErrorResponseException、ParameterException { 文字列IMAGEURLと、 文字列UUID = CommonUtil.getUUID()。 MinioClient minioClient= minioService.getMinioClient()。 入力ストリームは、 = )(file.getInputStream。 ストリングoriginalFilename = file.getOriginalFilename()。 文字列のcontentType = minioService.getContentType(originalFilename)。 文字列のサフィックス = UploadUtil.getFileSuffix(originalFilename)。 もし(!UploadUtil.isPicTypeSupport(接尾辞)){ スロー 新しい ParameterExceptionを( "PICタイプがサポートではありません" ); } 文字列currentDay = TimeUtils.getCurrentDayStr()。 文字列fileNameに tempDao.getPicByUuid(pic.getUuid())。= currentDay + "/" + UUID + "" + 接尾辞; minioClient.putObject(タイプ、ファイル名、である、のcontentType)。 IMAGEURL = "/" +タイプ+ "/" + ファイル名; PicParamsのparam = 新しいPicParams(); param.setUrl(IMAGEURL)。 param.setUuid(UUID)。 tempDao.insertPicTmp(PARAM)。 返すUUID; } 公共 ボイド initUrlAndDelTempPic(BasePicContent PIC)をスロー例外{ 試みを{ PicTempのTEMP = pic.setUrl(temp.getUrl())。 tempDao.deleteTempPicByUuid(pic.getUuid()); } キャッチ(例外E){ log.error(e.getMessage()、E); スロー 新しい新 ParameterException( "ピクチャパラメータ悪いです!" ); } } }
- タスクのタイミングは、一時的なMinioの汚れたデータを削除します
@Component @ SLF4J パブリック クラスTempFileScheduler { @Autowired プライベートPicTempDao tempDao。 @Autowired プライベートMinioService minioService。 @Scheduled(クーロン = "0 0/30 * * *?" ) 公共 無効deleteTempPic(){ 試み{ log.info(「ジョブを開始deleteTempPic################# @ ################」); 一覧 <PicTemp> picTempList = tempDao.getTmpPicDaysBefore( "3" 、TimeUtils.DAY)。 MinioClient minioClient = minioService.getMinioClient()。 用(PicTemp picTemp:picTempList){ tempDao.deletePicTempById(picTemp.getId())。 MinioFile minioFile = minioService.getBucketFromUrl(picTemp.getUrl())。 minioClient.removeObject(minioFile.getBucket()、minioFile.getFileName())。 } log.info( "#################端ジョブdeleteTempPic ################ @" )。 } キャッチ(例外e){ log.error( "deleteTempPic" 、E)。 } } }