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

宁波网站建设制作网络公司上海网站seo招聘

宁波网站建设制作网络公司,上海网站seo招聘,网站推广的方法有哪几种,网站浮动条目录 一、前言 二、Minio 概述 2.1 Minio简介 2.1 Minio特点 三、Minio 环境搭建 3.1 部署过程 3.1.1 拉取镜像 3.1.2 启动容器 3.1.3 访问web页面 四、Minio基本使用 4.1 基本概念 4.2 上传文件演示 4.3 用户管理 4.4 Java操作Minio 4.4.1 导入依赖 4.4.2 上传…目录 一、前言 二、Minio 概述 2.1 Minio简介 2.1 Minio特点 三、Minio 环境搭建 3.1 部署过程 3.1.1 拉取镜像 3.1.2 启动容器 3.1.3 访问web页面 四、Minio基本使用 4.1 基本概念 4.2 上传文件演示 4.3 用户管理 4.4 Java操作Minio 4.4.1 导入依赖 4.4.2 上传文件到minio 五、springboot整合Minio 5.1 前置准备 5.1.1 引入依赖 5.1.2 核心配置文件 5.2 编码过程 5.2.1 创建一个参数配置类 5.2.2 创建minio配置类 5.2.3 创建minio文件服务类或工具类 5.2.4 编写测试接口 5.2.5 接口测试 六、写在文末 一、前言 在很多互联网产品应用中都涉及到各种与文件存储相关的业务随着技术的发展关于如何解决分布式文件存储也有了比较成熟的方案比如私有云部署下可以考虑fastdfs阿里云对象存储oss七牛云等本篇将为你介绍另一种文件存储方式即MinIO 。 二、Minio 概述 2.1 Minio简介 MinIO基于Apache License v2.0开源协议的对象存储服务可以做为云存储的解决方案用来保存海量的图片视频文档是一款高性能、分布式的对象存储系统 可以100%的运行在标准硬件即X86等低成本机器也能够很好的运行MinIO。 传统的存储和其他的对象存储不同的是 它一开始就针对性能要求更高的私有云标准进行软件架构设计。因为MinIO一开始就只为对象存储而设计。所以他采用了更易用的方式进行设计它能实现对象存储所需要的全部功能在性能上也更加强劲它不会为了更多的业务功能而妥协失去MinIO的易用性、高效性。 这样的结果所带来的好处是它能够更简单的实现局有弹性伸缩能力的原生对象存储服务。 2.1 Minio特点 Minio具有如下特点 性能高准硬件条件下它能达到55GB/s的读、35GB/s的写速率部署自带管理界面MinIO.Inc运营的开源项目社区活跃度高提供了所有主流开发语言的SDK基于Golang语言实现配置简单单行命令可以运行起来兼容亚马逊S3云存储服务接口适合于存储大容量非结构化的数据一个对象文件可以是任意大小从几kb到最大5T不等 三、Minio 环境搭建 本文采用docker的方式快速搭建起Minio的环境也可以通过官网下载安装包部署官网安装包下载地址 3.1 部署过程 3.1.1 拉取镜像 docker pull minio/minio 3.1.2 启动容器 docker run -d -p 9000:9000 -p 9090:9090 \--name minio \-e MINIO_ACCESS_KEYminio \-e MINIO_SECRET_KEYminio \-v /home/minio/data:/data \-v /home/minio/config:/root/.minio \minio/minio server \/data --console-address :9090 -address :9000 3.1.3 访问web页面 容器启动成功后注意开发相关的防火墙端口即可然后访问地址IP:9000即可访问Minio的web界面 输入账户和密码登录进去之后看到下面的效果说明Minio环境搭建完成 四、Minio基本使用 4.1 基本概念 在正式开始使用Minio之前有必要先了解下几个相关的概念 bucket 类比于文件系统的目录Object 类比文件系统的文件Keys 类比文件名 4.2 上传文件演示 如下点击创建一个新的bucket创建完成后就可以在列表上看到这个bucket 给当前这个bucket上传一个文件 点击文件夹图标 上传一张本地文件上传完成后就可以看到这个文件了也可以浏览上传的文件 4.3 用户管理 针对客户端的操作经常需要维护相关的账号来管理比如账户的操作权限访问控制等 点击创建用户 填写用户信息勾选权限保存即可 然后在用户列表就可以看到这个用户了 4.4 Java操作Minio 通过上面的环境搭建和操作演示并了解了如何快速使用Minio更多的功能可以参阅相关资料进一步学习了解下面我们编写java代码完成文件的上传。 4.4.1 导入依赖 在当前的maven工程中导入minio的依赖客户端具体版本可以根据你的实际需要选择 dependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion7.1.0/version/dependency 4.4.2 上传文件到minio 通过下面这段代码将本地的一张图片文件上传到minio的test这个bucket目录下 public static void main(String[] args) {FileInputStream inputStream null;try {inputStream new FileInputStream(F:\\网盘\\Title-logo.png);MinioClient client MinioClient.builder().credentials(minio, minio).endpoint(http://IP:9000).build();PutObjectArgs putObjectArgs PutObjectArgs.builder().object(logo.png).contentType(image/png).bucket(test).stream(inputStream, inputStream.available(), -1).build();client.putObject(putObjectArgs);System.out.println(上传成功);} catch (Exception e) {e.printStackTrace();} finally {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}} 运行这段代码上传成功后去到test的目录下刷新之后可以看到文件已经上传 五、springboot整合Minio 接下来让我们看看如何在springboot中集成Minio参考下面的操作步骤 5.1 前置准备 5.1.1 引入依赖 创建一个maven工程引入如下相关的依赖 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.4.RELEASE/version/parentdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-autoconfigure/artifactId/dependencydependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion7.1.0/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.83/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactId/dependency/dependencies 5.1.2 核心配置文件 在配置文件中添加如下内容 server:port: 8087logging:level:root: infocom.congge.model: debugminio:username: miniopwd: miniobucket: testendpoint: http://IP:9000readPath: http://IP:9000 5.2 编码过程 5.2.1 创建一个参数配置类 通过这种方式将配置文件中以minio开头的那些配置加载到spring容器中管理其他位置使用的时候直接注入即可 Data ConfigurationProperties(prefix minio) Component public class MinIOConfigProperties implements Serializable {private String username;private String pwd;private String bucket;private String endpoint;private String readPath;} 5.2.2 创建minio配置类 通过这个全局的配置类其他需要上传文件的类中直接注入MinioClient即可 import io.minio.MinioClient; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Data Configuration public class MinIOConfig {Autowiredprivate MinIOConfigProperties minIOConfigProperties;Beanpublic MinioClient buildMinioClient() {return MinioClient.builder().credentials(minIOConfigProperties.getAccessKey(), minIOConfigProperties.getSecretKey()).endpoint(minIOConfigProperties.getEndpoint()).build();} } 5.2.3 创建minio文件服务类或工具类 在日常开发中可以自定义一个minio的工具类使用的时候就比较方便了下面的代码中列举了常用的一些API操作方法可以结合实际需要自定义更多的工具方法 import com.congge.config.MinIOConfig; import com.congge.config.MinIOConfigProperties; import com.congge.service.MinioFileService; import io.minio.*; import io.minio.messages.Bucket; import io.minio.messages.Item; import lombok.extern.slf4j.Slf4j; import org.apache.poi.util.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Import; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID;Slf4j Import(MinIOConfig.class) Service public class MinioFileServiceImpl implements MinioFileService {Autowiredprivate MinioClient minioClient;Autowiredprivate MinIOConfigProperties minIOConfigProperties;private final static String separator /;/*** 下载文件** param pathUrl 文件全路径* return 文件流*/Overridepublic void downLoadFile(String pathUrl, HttpServletResponse response) {String[] pathItems pathUrl.split(/);String originFileName pathItems[pathItems.length - 1];String key pathUrl.replace(minIOConfigProperties.getEndpoint() /, );int index key.indexOf(separator);//String bucket key.substring(0,index);String filePath key.substring(index 1);InputStream inputStream null;try {inputStream minioClient.getObject(GetObjectArgs.builder().bucket(minIOConfigProperties.getBucket()).object(filePath).build());response.setHeader(Content-Disposition, attachment;filename originFileName);response.setContentType(application/force-download);response.setCharacterEncoding(UTF-8);IOUtils.copy(inputStream, response.getOutputStream());System.out.println(下载成功);} catch (Exception e) {log.error(minio down file error. pathUrl:{}, pathUrl);e.printStackTrace();} finally {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}Overridepublic String uploadFile(MultipartFile file) throws Exception {String bucketName minIOConfigProperties.getBucket();String endpoint minIOConfigProperties.getEndpoint();// 检查存储桶是否已经存在boolean isExist minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());if (isExist) {System.out.println(Bucket already exists.);} else {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());}String originalFilename file.getOriginalFilename();//拼接生成新的UUID形式的文件名String objectName new SimpleDateFormat(yyyy/MM/dd/).format(new Date()) UUID.randomUUID().toString().replaceAll(-, ) originalFilename.substring(originalFilename.lastIndexOf(.));PutObjectArgs objectArgs PutObjectArgs.builder().object(objectName).bucket(bucketName).contentType(file.getContentType()).stream(file.getInputStream(), file.getSize(), -1).build();minioClient.putObject(objectArgs);//组装桶中文件的访问urlString resUrl endpoint / bucketName / objectName;return resUrl;}/*** 删除文件** param pathUrl 文件全路径*/Overridepublic void delete(String pathUrl) {String key pathUrl.replace(minIOConfigProperties.getEndpoint() /, );int index key.indexOf(separator);String bucket key.substring(0, index);String filePath key.substring(index 1);// 删除ObjectsRemoveObjectArgs removeObjectArgs RemoveObjectArgs.builder().bucket(bucket).object(filePath).build();try {minioClient.removeObject(removeObjectArgs);} catch (Exception e) {log.error(minio remove file error. pathUrl:{}, pathUrl);e.printStackTrace();}}public ListBucket listBuckets()throws Exception {return minioClient.listBuckets();}public boolean bucketExists(String bucketName) throws Exception {boolean flag minioClient.bucketExists(bucketName);if (flag) {return true;}return false;}Overridepublic ListString listBucketNames() throws Exception{ListBucket bucketList listBuckets();ListString bucketListName new ArrayList();for (Bucket bucket : bucketList) {bucketListName.add(bucket.name());}return bucketListName;}Overridepublic boolean makeBucket(String bucketName) throws Exception{boolean flag bucketExists(bucketName);if (!flag) {minioClient.makeBucket(bucketName);return true;} else {return false;}}Overridepublic boolean removeBucket(String bucketName) throws Exception{boolean flag bucketExists(bucketName);if (flag) {IterableResultItem myObjects listObjects(bucketName);for (ResultItem result : myObjects) {Item item result.get();// 有对象文件则删除失败if (item.size() 0) {return false;}}// 删除存储桶注意只有存储桶为空时才能删除成功。minioClient.removeBucket(bucketName);flag bucketExists(bucketName);if (!flag) {return true;}}return false;}Overridepublic ListString listObjectNames(String bucketName) throws Exception{ListString listObjectNames new ArrayList();boolean flag bucketExists(bucketName);if (flag) {IterableResultItem myObjects listObjects(bucketName);for (ResultItem result : myObjects) {Item item result.get();listObjectNames.add(item.objectName());}}return listObjectNames;}Overridepublic boolean removeObject(String bucketName, String objectName) throws Exception{boolean flag bucketExists(bucketName);if (flag) {ListString objectList listObjectNames(bucketName);for (String s : objectList) {if(s.equals(objectName)){minioClient.removeObject(bucketName, objectName);return true;}}}return false;}Overridepublic String getObjectUrl(String bucketName, String objectName) throws Exception{boolean flag bucketExists(bucketName);String url ;if (flag) {url minioClient.getObjectUrl(bucketName, objectName);}return url;}public IterableResultItem listObjects(String bucketName) throws Exception {boolean flag bucketExists(bucketName);if (flag) {return minioClient.listObjects(bucketName);}return null;}}5.2.4 编写测试接口 为了方便测试下面定义了一个测试接口 import com.congge.service.MinioFileService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse; import java.util.List;RestController Slf4j public class FileController {Autowiredprivate MinioFileService minioFileService;/*** 上传文件* param file* return* throws Exception*/PostMapping(/upload)public String upload(RequestBody MultipartFile file) throws Exception {String url minioFileService.uploadFile(file);return 文件上传成功,文件路径 url;}/*** 下载文件* param pathUrl* param response*/GetMapping(/download)public void download(RequestParam(pathUrl) String pathUrl, HttpServletResponse response) {minioFileService.downLoadFile(pathUrl,response);}/*** 列出所有bucket名称* return* throws Exception*/PostMapping(/list/bucket)public ListString list() throws Exception {return minioFileService.listBucketNames();}/*** 创建bucket* param bucketName* return* throws Exception*/PostMapping(/create/bucket)public boolean createBucket(RequestParam(bucketName)String bucketName) throws Exception {return minioFileService.makeBucket(bucketName);}/*** 删除bucket* param bucketName* return* throws Exception*/PostMapping(/delete/bucket)public boolean deleteBucket(RequestParam(bucketName)String bucketName) throws Exception {return minioFileService.removeBucket(bucketName);}/*** 列出bucket的所有对象名称* param bucketName* return* throws Exception*/PostMapping(/list/object_names)public ListString listObjectNames(RequestParam(bucketName)String bucketName) throws Exception {return minioFileService.listObjectNames(bucketName);}/*** 删除bucket中的某个对象* param bucketName* param objectName* return* throws Exception*/PostMapping(/remove/object)public boolean removeObject(RequestParam(bucketName)String bucketName,RequestParam(objectName) String objectName) throws Exception {return minioFileService.removeObject(bucketName, objectName);}/*** 获取文件访问路径* param bucketName* param objectName* return* throws Exception*/PostMapping(/get/object/url)public String getObjectUrl(RequestParam(bucketName)String bucketName, RequestParam(objectName)String objectName) throws Exception {return minioFileService.getObjectUrl(bucketName, objectName);}} 5.2.5 接口测试 上传文件测试 上传成功后返回了文件的完整路径方便后续使用 然后在控制台的test这个bucket中检查是否上传上去了 下载文件测试 使用上一步返回的url直接调用下载接口下载完成后可以直接预览 更多的接口有兴趣的同学可以一一尝试下就不再赘述了。 六、写在文末 本文详细总结了Minio的搭建使用以及与springboot整合的完整步骤作为一款适用且轻量级的文件存储服务器可以私有化部署也可以很方便进行云上部署、容器化部署为今后在实际项目中的技术选型提供一个参考本篇到此结束感谢观看。
http://www.dnsts.com.cn/news/240778.html

相关文章:

  • 湘潭建设网站的公司电脑怎么用别人的网站吗
  • 天津建设工程协会网站10岁一12岁的创意手工
  • 网站 沙盒seo公司后付费
  • 品牌网站建设磐石网络优等长春火车站
  • 建手机网站要多少钱百度最新版app下载安装
  • 简述网站一般建设的流程网站设计简单网页
  • wordpress资料分享网站wordpress 微博侧边栏
  • wordpress360极速模式打不开西安抖音seo推广
  • 长沙做网站建设公司排名网络营销师报考条件
  • 制作免费网站的平台系统管家
  • 做网站图片知识400网站建设办公
  • 网站是否含有seo收录功能云速成美站
  • cc域名做网站好吗建设银行官方网站云服务中心
  • 凡科建站登陆海口制作网站
  • 怎么做一个购物网站网站运营每天做啥工作
  • word用来做网站的建设行业的门户网站
  • js做网站统计新城区网站建设
  • 怎么免费注册自己的网站做网站时新闻的背景图
  • 网站建设方案就玄苏州久远网络2345浏览器免费版
  • 口碑好的天津网站建设建筑工人信息平台
  • 搞计算机网站建设会亏钱吗中国进出口贸易网官网
  • 互联网情况下做企业网站的有点网站上登录系统制作
  • 建设视频网站重庆职业能力建设投稿网站
  • 网站设计报价.doc公司做网站需要提供什么条件
  • 百度安装应用柳州seo培训
  • 合肥网站推广外包公司装潢
  • 英文版网站建设方案怎么卸载windows优化大师
  • 建设银行网站的特点优势炫彩发光字制作网站
  • 手机查看别人网站代码吗wordpress 分类权限
  • 如何在阿里云上做网站深夜视频在线免费