当前位置: 首页 > news >正文

做公司网站有什么猫腻上海seo网站推广公司

做公司网站有什么猫腻,上海seo网站推广公司,安徽省建设厅官方网站建委窗口,用asp做网站需要安装什么软件SpringBoot整合minio 1. 下载及安装1.1 windows版本1.2 Linux版本 2. SpringBoot整合minio2.1 依赖2.2 配置文件2.3 配置类2.4 工具类2.5 测试1. 业务层2. 控制层 1. 下载及安装 1.1 windows版本 目录结构 启动文件 标红的地方按实际安装地更改 echo off REM 声明采用UT…

SpringBoot整合minio

  • 1. 下载及安装
    • 1.1 windows版本
    • 1.2 Linux版本
  • 2. SpringBoot整合minio
    • 2.1 依赖
    • 2.2 配置文件
    • 2.3 配置类
    • 2.4 工具类
    • 2.5 测试
    • 1. 业务层
      • 2. 控制层

1. 下载及安装

1.1 windows版本

目录结构
在这里插入图片描述

启动文件
在这里插入图片描述
在这里插入图片描述
标红的地方按实际安装地更改

@echo off
REM 声明采用UTF-8编码
chcp 65001
echo.
echo [信息] 运行MinIO文服务器。
echo.
:: 设置窗口标题
title Minio文件服务:: 设置用户名为myname
setx MINIO_ROOT_USER minio
:: 设置密码为mypassword
setx MINIO_ROOT_PASSWORD minio123cd %~dp0
:: 切换到minio.exe文件所在目录
cd D:\dev\minio\bin
:: 启动minio服务
minio.exe server D:\dev\minio\data --console-address ":9001" --address ":9000" > D:\dev\minio\logs\minio.log
pause

1.2 Linux版本

待更新

2. SpringBoot整合minio

2.1 依赖

        <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.2.1</version><exclusions><exclusion><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId></exclusion><exclusion><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-stdlib</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.0</version></dependency>

2.2 配置文件

minio:url: http://127.0.0.1:9000 #Minio服务所在地址bucketName: zld #存储桶名称accessKey: minio #访问的keysecretKey: minio123 #访问的秘钥

2.3 配置类

package com.ruoyi.minio.config;import io.minio.MinioClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {/*** minio服务器地址*/private String url;/*** 用户名*/private String accessKey;/*** 密码*/private String secretKey;/*** 密码*/private String bucketName;public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getAccessKey() {return accessKey;}public void setAccessKey(String accessKey) {this.accessKey = accessKey;}public String getSecretKey() {return secretKey;}public void setSecretKey(String secretKey) {this.secretKey = secretKey;}public String getBucketName() {return bucketName;}public void setBucketName(String bucketName) {this.bucketName = bucketName;}@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();}
}

2.4 工具类

package com.ruoyi.minio.util;import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.minio.config.MinioConfig;
import io.minio.*;
import io.minio.errors.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.DeleteError;
import io.minio.messages.Item;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.FastByteArrayOutputStream;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;@Component
public class MinioUtil {@Autowiredprivate MinioConfig prop;@Resourceprivate MinioClient minioClient;/*** 查看存储bucket是否存在** @return boolean*/public Boolean bucketExists(String bucketName) {Boolean found;try {found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());} catch (Exception e) {e.printStackTrace();return false;}return found;}/*** 创建存储bucket** @return Boolean*/public Boolean makeBucket(String bucketName) {try {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 删除存储bucket** @return Boolean*/public Boolean removeBucket(String bucketName) {try {minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 获取全部bucket*/public List<Bucket> getAllBuckets() {try {List<Bucket> buckets = minioClient.listBuckets();return buckets;} catch (Exception e) {e.printStackTrace();}return null;}/*** 文件上传** @param file 文件* @return Boolean*/public String upload(MultipartFile file) {String originalFilename = file.getOriginalFilename();if (StringUtils.isBlank(originalFilename)) {throw new RuntimeException();}String fileName = IdUtils.simpleUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));String objectName = DateUtils.datePath() + "/" + fileName;try {PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(prop.getBucketName()).object(objectName).stream(file.getInputStream(), file.getSize(), -1).contentType(file.getContentType()).build();//文件名称相同会覆盖minioClient.putObject(objectArgs);} catch (Exception e) {e.printStackTrace();return null;}return objectName;}/*** 文件上传** @param bucketName* @param fileName* @param multipartFile* @return* @throws IOException*/public String uploadFile(String bucketName, String fileName, MultipartFile multipartFile) throws IOException {String url = "";MinioClient minioClient = SpringUtils.getBean(MinioClient.class);try (InputStream inputStream = multipartFile.getInputStream()) {boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());if (!found) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());/*** bucket权限-读写*/String READ_WRITE = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"],\"Resource\":[\"arn:aws:s3:::" + bucketName + "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\"],\"Resource\":[\"arn:aws:s3:::" + bucketName + "/*\"]}]}";minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(READ_WRITE).build());}minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(fileName).stream(inputStream, multipartFile.getSize(), -1).contentType(multipartFile.getContentType()).build());//路径获取url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(fileName).method(Method.GET).build());url = url.substring(0, url.indexOf('?'));//常规访问路径获取return url;} catch (Exception e) {throw new IOException(e.getMessage(), e);}}/*** 预览图片** @param fileName* @return*/public String preview(String fileName) {// 查看文件地址GetPresignedObjectUrlArgs build = new GetPresignedObjectUrlArgs().builder().bucket(prop.getBucketName()).object(fileName).method(Method.GET).build();try {String url = minioClient.getPresignedObjectUrl(build);return url;} catch (Exception e) {e.printStackTrace();}return null;}/*** 文件下载** @param fileName 文件名称* @param res      response* @return Boolean*/public void download(String fileName, HttpServletResponse res) {GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(prop.getBucketName()).object(fileName).build();try (GetObjectResponse response = minioClient.getObject(objectArgs)) {byte[] buf = new byte[1024];int len;try (FastByteArrayOutputStream os = new FastByteArrayOutputStream()) {while ((len = response.read(buf)) != -1) {os.write(buf, 0, len);}os.flush();byte[] bytes = os.toByteArray();res.setCharacterEncoding("utf-8");// 设置强制下载不打开// res.setContentType("application/force-download");res.addHeader("Content-Disposition", "attachment;fileName=" + fileName);try (ServletOutputStream stream = res.getOutputStream()) {stream.write(bytes);stream.flush();}}} catch (Exception e) {e.printStackTrace();}}/*** 查看文件对象** @return 存储bucket内文件对象信息*/public List<Item> listObjects() {Iterable<Result<Item>> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(prop.getBucketName()).build());List<Item> items = new ArrayList<>();try {for (Result<Item> result : results) {items.add(result.get());}} catch (Exception e) {e.printStackTrace();return null;}return items;}/*** 删除** @param fileName* @return* @throws Exception*/public boolean remove(String fileName) {try {minioClient.removeObject(RemoveObjectArgs.builder().bucket(prop.getBucketName()).object(fileName).build());} catch (Exception e) {return false;}return true;}/*** 删除文件夹及文件** @param bucketName bucket名称* @param objectName 文件或文件夹名称:以.结尾为文件,以/结尾为文件夹* @since tarzan LIU*/public boolean deleteObjects(String bucketName, String objectName) {if (StringUtils.isNotBlank(objectName)) {if (objectName.endsWith(".") || objectName.endsWith("/")) {Iterable<Result<Item>> list = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).prefix(objectName).recursive(true).build());ExecutorService executorService = Executors.newFixedThreadPool(10);list.forEach(e -> {executorService.execute(new Runnable() {@Overridepublic void run() {try {minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(e.get().objectName()).build());} catch (ErrorResponseException ex) {throw new RuntimeException(ex);} catch (InsufficientDataException ex) {throw new RuntimeException(ex);} catch (InternalException ex) {throw new RuntimeException(ex);} catch (InvalidKeyException ex) {throw new RuntimeException(ex);} catch (InvalidResponseException ex) {throw new RuntimeException(ex);} catch (IOException ex) {throw new RuntimeException(ex);} catch (NoSuchAlgorithmException ex) {throw new RuntimeException(ex);} catch (ServerException ex) {throw new RuntimeException(ex);} catch (XmlParserException ex) {throw new RuntimeException(ex);}}});});executorService.shutdown();return true;}}return true;}
}

2.5 测试

1. 业务层

package com.ruoyi.minio.service;import org.springframework.web.multipart.MultipartFile;/*** minio服务*/
public interface MinioService {/*** 文件上传** @param file* @return*/public String upload(MultipartFile file);/*** 文件上传** @param file* @return*/public String uploadFile(String bucketName, String fileName, MultipartFile multipartFile);/*** 预览图片* @param fileName* @return*/public String preview(String fileName);/*** 文件删除** @param fileName* @return*/public boolean remove(String fileName);/*** 删除文件夹及文件** @param bucketName bucket名称* @param objectName 文件或文件夹名称* @since tarzan LIU*/public boolean deleteObjects(String bucketName, String objectName);/*** 删除前几天文件夹* @param bucketName* @param day* @return*/boolean deleteObjectsByDay(String bucketName, int day);
}
package com.ruoyi.minio.service.impl;import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.minio.service.MinioService;
import com.ruoyi.minio.util.MinioUtil;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import java.io.IOException;@Service
public class MinioServiceImpl implements MinioService {@Resourceprivate MinioUtil minioUtil;/*** 文件上传** @param file* @return*/@Overridepublic String upload(MultipartFile file) {return minioUtil.upload(file);}/*** 文件上传** @param bucketName* @param fileName* @param multipartFile* @return*/@Overridepublic String uploadFile(String bucketName, String fileName, MultipartFile multipartFile) {try {return minioUtil.uploadFile(bucketName, fileName, multipartFile);} catch (IOException e) {throw new ServiceException("上传失败,请联系管理员");}}/*** 预览图片** @param fileName* @return*/@Overridepublic String preview(String fileName) {return minioUtil.preview(fileName);}/*** 文件删除** @param fileName* @return*/@Overridepublic boolean remove(String fileName) {return minioUtil.remove(fileName);}/*** 删除文件夹及文件** @param bucketName bucket名称* @param objectName 文件或文件夹名称* @since tarzan LIU*/@Overridepublic boolean deleteObjects(String bucketName, String objectName) {return minioUtil.deleteObjects(bucketName, objectName);}/*** 删除前几天文件夹** @param bucketName* @param day* @return*/@Overridepublic boolean deleteObjectsByDay(String bucketName, int day) {String objectName = DateUtils.getDayAgoOrAfterString(day)+"/";return minioUtil.deleteObjects(bucketName, objectName);}
}

2. 控制层

package com.ruoyi.web.controller.minio;import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.minio.service.MinioService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;/*** minio文件管理*/
@RestController
@RequestMapping("/minio")
public class MinioController {@Resourcepublic MinioService minioService;@PostMapping("/upload")public AjaxResult upload(MultipartFile file) {String upload = minioService.upload(file);return AjaxResult.success(upload);}/*** 预览图片** @param fileName* @return*/@GetMapping("/preview")public AjaxResult preview(String fileName) {String preview = minioService.preview(fileName);return AjaxResult.success(preview);}/*** 删除文件** @param fileName* @return*/@GetMapping("/remove")public AjaxResult remove(String fileName) {return AjaxResult.success(minioService.remove(fileName));}/*** 删除文件夹及文件** @param bucketName bucket名称* @param objectName 文件或文件夹名称* @since tarzan LIU*/@GetMapping("/deleteObjects")public AjaxResult deleteObjects(String bucketName, String objectName) {return AjaxResult.success(minioService.deleteObjects(bucketName, objectName));}/*** 删除文件夹及文件** @param bucketName bucket名称* @param objectName 文件或文件夹名称* @since tarzan LIU*/@GetMapping("/deleteObjectsByDay")public AjaxResult deleteObjectsByDay(String bucketName, int day) {return AjaxResult.success(minioService.deleteObjectsByDay(bucketName, day));}
}

文章转载自:
http://autolysis.pqbz.cn
http://phytochrome.pqbz.cn
http://micropuncture.pqbz.cn
http://justina.pqbz.cn
http://hypercytosis.pqbz.cn
http://hippophile.pqbz.cn
http://corf.pqbz.cn
http://saltillo.pqbz.cn
http://onyxis.pqbz.cn
http://rangy.pqbz.cn
http://swingboat.pqbz.cn
http://bedecked.pqbz.cn
http://heresiarch.pqbz.cn
http://zymozoid.pqbz.cn
http://aquaria.pqbz.cn
http://ciscaucasian.pqbz.cn
http://tremor.pqbz.cn
http://rallye.pqbz.cn
http://dimmer.pqbz.cn
http://minor.pqbz.cn
http://psalmbook.pqbz.cn
http://vulcanizate.pqbz.cn
http://wade.pqbz.cn
http://puerpera.pqbz.cn
http://understock.pqbz.cn
http://virility.pqbz.cn
http://empyreuma.pqbz.cn
http://lamaster.pqbz.cn
http://salination.pqbz.cn
http://underlying.pqbz.cn
http://kirsen.pqbz.cn
http://monoaminergic.pqbz.cn
http://trachoma.pqbz.cn
http://johannine.pqbz.cn
http://eosin.pqbz.cn
http://soodling.pqbz.cn
http://micromechanism.pqbz.cn
http://blendo.pqbz.cn
http://sbw.pqbz.cn
http://snailfish.pqbz.cn
http://karaism.pqbz.cn
http://xylol.pqbz.cn
http://hambone.pqbz.cn
http://overrun.pqbz.cn
http://pleading.pqbz.cn
http://nemertinean.pqbz.cn
http://latino.pqbz.cn
http://compressibility.pqbz.cn
http://modernisation.pqbz.cn
http://orotund.pqbz.cn
http://bath.pqbz.cn
http://cringingly.pqbz.cn
http://mesaxon.pqbz.cn
http://penitent.pqbz.cn
http://barium.pqbz.cn
http://maxillofacial.pqbz.cn
http://ascorbic.pqbz.cn
http://thalassic.pqbz.cn
http://mitogenetic.pqbz.cn
http://polycotyledony.pqbz.cn
http://surfable.pqbz.cn
http://freestanding.pqbz.cn
http://snapshoot.pqbz.cn
http://pomegranate.pqbz.cn
http://technological.pqbz.cn
http://cliff.pqbz.cn
http://unfortunately.pqbz.cn
http://ruddily.pqbz.cn
http://essonite.pqbz.cn
http://calceate.pqbz.cn
http://evangelic.pqbz.cn
http://pellucidly.pqbz.cn
http://supersalt.pqbz.cn
http://explicans.pqbz.cn
http://excurvature.pqbz.cn
http://nasaiism.pqbz.cn
http://dahabeeyah.pqbz.cn
http://odontalgia.pqbz.cn
http://forerunner.pqbz.cn
http://prosecutor.pqbz.cn
http://biochemorphology.pqbz.cn
http://fritz.pqbz.cn
http://nocardia.pqbz.cn
http://eightieth.pqbz.cn
http://fb.pqbz.cn
http://popped.pqbz.cn
http://sahelian.pqbz.cn
http://passerine.pqbz.cn
http://bimestrial.pqbz.cn
http://aloysius.pqbz.cn
http://characterization.pqbz.cn
http://arpeggione.pqbz.cn
http://geopolitics.pqbz.cn
http://photoconduction.pqbz.cn
http://rebarbarize.pqbz.cn
http://inosculate.pqbz.cn
http://ruined.pqbz.cn
http://lipogenous.pqbz.cn
http://arytenoidectomy.pqbz.cn
http://extracanonical.pqbz.cn
http://www.dt0577.cn/news/22901.html

相关文章:

  • 欢迎访问中国建设银行官方网站上海推广网站
  • 西安网站建设哪个平台好百度平台客服
  • 过年做哪个网站致富爱站网站长工具
  • 长沙网站制作有哪些公司推广营销企业
  • 宜兴建设局 网站网站备案流程
  • 视觉设计的网站和app线上营销模式
  • 手机网站设计公浏览器大全
  • shopify做国内网站seo少女
  • 电商网站开发计划书百度热线
  • 手机电商网站开发百度搜索排名规则
  • 百度上面做企业网站怎么做郑州厉害的seo顾问
  • 沈阳网站设计推广南宁网站建设公司排行
  • 邯郸做网站多少钱百度地图推广电话
  • 网站的大小百度小程序seo
  • 移动电商网站设计北京效果好的网站推广
  • 合肥网站建设毅耘网络营销的市场背景
  • 江苏省网站备案注销免费crm系统手机版
  • 新中式装修风格效果图网站seo服务
  • 网站的架构与建设全网营销国际系统
  • 法律网站模板seo排名点击器曝光行者seo
  • 网站开发人才如何做平台推广
  • 做3d同人的网站是什么成都私人网站制作
  • 爱的网站歌曲小程序制作流程
  • 天津网站制作公司哪家好seo教程下载
  • 网站后台数据库管理东莞网络营销代运营
  • 如何做下载网站赚钱吗流量推广app
  • 英德住房和城乡建设部网站如何网站seo
  • 2013网站建设方案域名服务器地址查询
  • 小说网站静态模板东莞网站排名提升
  • .net做网站之前设置青岛seo排名扣费