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

嘉兴学网站建设灌阳县建设局门户网站

嘉兴学网站建设,灌阳县建设局门户网站,新绛网站建设,网站建设中怎样设置背景minIO 服务搭建 1. 创建安装目录 mkdir -p /usr/local/minio2. 进入安装目录 cd /usr/local/minio3.下载安装包 (wget 如果下载太慢,可以手动下载并上传安装包) wget https://dl.minio.io/server/minio/release/linux-amd64/minio4.创建数据存储文件夹 mkdir -p /usr/loca…minIO 服务搭建 1. 创建安装目录 mkdir -p /usr/local/minio2. 进入安装目录 cd /usr/local/minio3.下载安装包 (wget 如果下载太慢,可以手动下载并上传安装包) wget https://dl.minio.io/server/minio/release/linux-amd64/minio4.创建数据存储文件夹 mkdir -p /usr/local/minio/data5.编辑配置文件 vim /etc/default/minio5.1 添加内容用户名、密码、数据存储文件、程序链接端口、web界面访问端口 MINIO_ROOT_USERminio MINIO_ROOT_PASSWORDminio123 MINIO_VOLUMES /usr/local/minio/data MINIO_OPTS--address 0.0.0.0:9000 MINIO_OPTS1--console-address 0.0.0.0:190016.添加开机自启动配置 编辑配置文件文件 vim /etc/systemd/system/minio.service添加配置文件内容 (主意启动器路径,自定义服务配置文件路径,以及连接端口要与配置文件里的对应) [Unit] DescriptionMinIO Documentationhttps://docs.min.io Wantsnetwork-online.target Afternetwork-online.target AssertFileIsExecutable/usr/local/minio/minio[Service] WorkingDirectory/usr/local/minio ProtectProcinvisibleEnvironmentFile/etc/default/minio ExecStartPre/bin/bash -c if [ -z \${MINIO_VOLUMES}\ ]; then echo \Variable MINIO_VOLUMES not set in /etc/default/minio\; exit 1; fi ExecStart/usr/local/minio/minio server --address 0.0.0.0:9000 $MINIO_OPTS $MINIO_OPTS1 $MINIO_VOLUMES# Let systemd restart this service always Restartalways# Specifies the maximum file descriptor number that can be opened by this process LimitNOFILE65536# Specifies the maximum number of threads this process can create TasksMaxinfinity# Disable timeout logic and wait until process is stopped TimeoutStopSecinfinity SendSIGKILLno[Install] WantedBymulti-user.target7. 启动服务 #加载配置 systemctl daemon-reload #添加启动器权限 chmod x /usr/local/minio/minio #启动minio systemctl start minio.service #开启开机自启 systemctl enable minio.service查看服务 ps -ef |grep minio8.验证服务 http://ip:19001/login通过配置的账号密码登录 9.常用命令 systemctl start minio.service #启动minio服务 systemctl stop minio.service #停止minio服务 systemctl restart minio.service #重新启动服务 systemctl status minio.service #查看服务当前状态 systemctl enable minio.service #设置开机自启动 systemctl disable minio.service #停止开机自启动10.目录 安装目录/usr/local/minio 数据保存目录/usr/local/minio/data 配置文件目录/etc/default/minio 启动配置文件存放目录vim /etc/systemd/system/minio.serviceSpringBoot 整合 1.添加依赖 比较新的版本 最新到8.5.5 ,更多版本可以到maven仓库找 https://mvnrepository.com/artifact/io.minio/minio !-- https://mvnrepository.com/artifact/io.minio/minio --dependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion8.5.3/version/dependency2.添加yml配置 minio:endpoint: http://127.0.0.1:9000 #Minio服务所在地址bucketName: test #存储桶名称accessKey: minioadmin #访问的keysecretKey: minioadmin #访问的秘钥3.MinioConfig.class配置类 Data Configuration ConfigurationProperties(prefix minio) public class MinioConfig {private String endpoint;private String accessKey;private String secretKey;private String bucketName;Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();} } 4.minio工具类 import com.alibaba.nacos.common.utils.UuidUtils; import com.system.common.utils.RandomIdUtil; import com.system.iotmanagement.config.MinioConfig; import io.minio.*; import io.minio.http.Method; import io.minio.messages.Bucket; import io.minio.messages.Item; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.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 org.springframework.web.util.UriUtils;import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List;Component Slf4j 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 {if (!bucketExists(bucketName)) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());String policyJson {\n \t\Version\: \new SimpleDateFormat(yyyy-mm-dd).format(System.currentTimeMillis())\,\n \t\Statement\: [{\n \t\t\Effect\: \Allow\,\n \t\t\Principal\: {\n \t\t\t\AWS\: [\*\]\n \t\t},\n \t\t\Action\: [\s3:GetBucketLocation\, \s3:ListBucket\, \s3:ListBucketMultipartUploads\],\n \t\t\Resource\: [\arn:aws:s3::: bucketName \]\n \t}, {\n \t\t\Effect\: \Allow\,\n \t\t\Principal\: {\n \t\t\t\AWS\: [\*\]\n \t\t},\n \t\t\Action\: [\s3:AbortMultipartUpload\, \s3:DeleteObject\, \s3:GetObject\, \s3:ListMultipartUploadParts\, \s3:PutObject\],\n \t\t\Resource\: [\arn:aws:s3::: bucketName /*\]\n \t}]\n }\n;minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(policyJson).build());log.info(buckets【{}】,创建[readwrite]策略成功, bucketName);} else {log.info(minio bucket-【{}】already exists, bucketName);}} 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 ListBucket getAllBuckets() {try {ListBucket 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 UuidUtils.generateUuid() originalFilename.substring(originalFilename.lastIndexOf(.));String objectName RandomIdUtil.getyyyyMMddString() / 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 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 ((lenresponse.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 UriUtils.encode(fileName, StandardCharsets.UTF_8));try (ServletOutputStream stream res.getOutputStream()){stream.write(bytes);stream.flush();}}} catch (Exception e) {e.printStackTrace();}}/*** 查看文件对象* return 存储bucket内文件对象信息*/public ListItem listObjects() {IterableResultItem results minioClient.listObjects(ListObjectsArgs.builder().bucket(prop.getBucketName()).build());ListItem items new ArrayList();try {for (ResultItem 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;} }生成时间字符串的工具类,(可以自己另外引用其他的) import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.symmetric.AES; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random;public class RandomIdUtil {/*** 生成随机ID当前年月日时分秒毫秒 五位随机数*/public static String getRandomID(String businessCode) {String str new SimpleDateFormat(yyyyMMddHHmmssSS).format(new Date());Random random new Random();int rannum (int) (random.nextDouble() * (99999 - 10000 1)) 10000;// 获取5位随机数return businessCodestr rannum;// 当前时间}public static String getyyyyMMddHHString() {return new SimpleDateFormat(yyyyMMddHH).format(new Date());}public static String getyyyyMMddString() {return new SimpleDateFormat(yyyyMMdd).format(new Date());}} 5. 文件处理接口 Api(tags 文件相关接口) Slf4j RestController RequestMapping(value product/file) public class FileController {Autowiredprivate MinioUtil minioUtil;Autowiredprivate MinioConfig prop;ApiOperation(value 查看存储bucket是否存在)GetMapping(/bucketExists)public R bucketExists(RequestParam(bucketName) String bucketName) {return R.ok().put(bucketName,minioUtil.bucketExists(bucketName));}ApiOperation(value 创建存储bucket)GetMapping(/makeBucket)public R makeBucket(String bucketName) {return R.ok().put(bucketName,minioUtil.makeBucket(bucketName));}ApiOperation(value 删除存储bucket)GetMapping(/removeBucket)public R removeBucket(String bucketName) {return R.ok().put(bucketName,minioUtil.removeBucket(bucketName));}ApiOperation(value 获取全部bucket)GetMapping(/getAllBuckets)public R getAllBuckets() {ListBucket allBuckets minioUtil.getAllBuckets();return R.ok().put(allBuckets,allBuckets);}ApiOperation(value 文件上传返回url)PostMapping(/upload)public R upload(RequestParam(file) MultipartFile file) {String objectName minioUtil.upload(file);if (null ! objectName) {return R.ok().put(url,(prop.getEndpoint() / prop.getBucketName() / objectName));}return R.error();}ApiOperation(value 图片/视频预览)GetMapping(/preview)public R preview(RequestParam(fileName) String fileName) {return R.ok().put(filleName,minioUtil.preview(fileName));}ApiOperation(value 文件下载)GetMapping(/download)public R download(RequestParam(fileName) String fileName, HttpServletResponse res) {minioUtil.download(fileName,res);return R.ok();}ApiOperation(value 删除文件, notes 根据url地址删除文件)PostMapping(/delete)public R remove(String url) {String objName url.substring(url.lastIndexOf(prop.getBucketName()/) prop.getBucketName().length()1);minioUtil.remove(objName);return R.ok().put(objName,objName);}} 基本操作和可能遇到的问题 1.存储bucket 的两种方式 1.客户端手动创建 2.代码创建,见工具类和接口方法 可能遇到的问题 当文件上传之后比如一张图片,直接通过图片路径访问报一下错误 这是因为浏览器打开没有权限 解决办法默认显示的是n/a,设置minio代理权限选择对应的桶将其代理权限也设置为公有 就可以成功访问了
http://www.yutouwan.com/news/53681/

相关文章:

  • 排版设计模板安新seo优化排名网站
  • 庆阳网站设计京东官网登录
  • 网站没有问题但是一直做不上首页开发软件开发
  • 手机微网站模板手机建站平台哪个便宜
  • 怎么做短链接网站建网站做外贸
  • 网站首页代码怎么做网站怎么发布到服务器
  • 大气物流网站源码浙江省建设培训中心网
  • 怎么看出是模板网站网站建设的请示
  • 做外贸的数据网站有哪些选择做印象绍兴网站的原因
  • 娄底网站建设设计大连企业网站建设
  • 做服装外贸哪个网站好wordpress微信收款
  • 爱站长尾关键词挖掘工具江门恒达互联网网站建设
  • 公司做网站需要准备哪些资料wordpress图片无法显示
  • 在谷歌上做英文网站网站的步骤
  • 北京手机网站设计南宁有做网站的公司吗
  • 做视频网站注意什么问题全国企业信息系统查询系统
  • 杭州高端定制网站注册公司名字核名查询系统
  • 黑白网站模板o2o平台有哪些行业
  • 电脑软件下载平台哪个好seo长沙
  • 招聘网有哪些网站比较好网站生成手机站
  • 郑州专业网站设计公司地址会计培训班初级费用
  • 开发区网站建设公司福州制作网站设计找哪家公司
  • 赤坎手机网站建设wordpress常规选项
  • 做流量的网站多语言免费网站建设
  • 苏州建网站的公司济南公司制作网站
  • 政协网站建设申请函广东网站建设微信商城开发
  • seo网站快速排名外包仿团购网站模板
  • 网站销售需要什么手续微信上如何创建小程序
  • 手机建站平台微点手赚网站怎么屏蔽国内访问
  • 买源码的网站用dw做网站的步骤