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

RustFS安装与使用

由于MinIO的控制台屏蔽了很多之前已有的功能,就剩下查看的功能。今天分享一款最近刚开源的分布式文件系统RustFS,自带管理控制台,功能很强大!RustFS是一个基于Rust语言开发的高性能分布式对象存储软件,与MinIO一样,它具有使用简单、兼容AWS S3协议、开源等优势,它采用Apache开源协议。

1. RustFS介绍

RustFS的主要特效如下:

  • 高性能:基于Rust构建,具有较高的性能和响应速度。
  • 分布式架构:可扩展且容错的设计,适用于大规模部署。
  • AWS S3 兼容性:可使用AWS S3 SDK来管理它。
    数据湖支持:针对大数据和AI工作负载进行了优化。
  • 开源:采用Apache 2.0许可证,鼓励社区贡献和透明度。
  • 用户友好:具有可视化管理控制台,方便管理。

2. RustFS下载

  • 官网:https://rustfs.com/download/?platform=windows

  • 下面是RustFS使用过程中的效果图,功能还是很强大的!

  • 下载安装后,运行访问RustFS的管理控制台了,默认账号密码为rustfsadmin:rustfsadmin,访问地址:http://127.0.0.1:9000

3. RustFS使用

3.1. 引入依赖

<!-- S3 SDK 依赖 --><dependency><groupId>software.amazon.awssdk</groupId><artifactId>s3</artifactId><version>2.20.161</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-core</artifactId><version>5.8.22</version></dependency>

3.2. yaml配置

rustfs:endpoint:http://127.0.0.1:9000bucketName:simpleaccessKey:rustfsadminsecretKey:rustfsadmin

3.3. RustFS配置类

@ConfigurationpublicclassRustFSConfig{@Value("${rustfs.endpoint}")privateStringENDPOINT;@Value("${rustfs.accessKey}")privateStringACCESS_KEY;@Value("${rustfs.secretKey}")privateStringSECRET_KEY;@BeanpublicS3Clients3Client(){// 初始化 S3 客户端returnS3Client.builder().endpointOverride(URI.create(ENDPOINT))// RustFS 地址.region(Region.US_EAST_1)// 可写死,RustFS 不校验 region.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(ACCESS_KEY,SECRET_KEY))).forcePathStyle(true)// 关键配置!RustFS 需启用 Path-Style.build();}}

3.4. 实体类

/** * @description RustFS Bucket访问策略配置 */@Data@EqualsAndHashCode@BuilderpublicclassBucketPolicyConfigDto{privateStringID;privateStringVersion;privateList<Statement>Statement;@Data@EqualsAndHashCode@BuilderpublicstaticclassStatement{privateStringEffect;privatePrincipalPrincipal;privateString[]Action;privateString[]Resource;}@Data@EqualsAndHashCode@BuilderpublicstaticclassPrincipal{privateString[]AWS;}}/** * @description RustFS文件上传返回结果 */@DatapublicclassRustFSUploadResult{//"文件访问URL")privateStringurl;//@Schema(title = "文件名称")privateStringname;}

3.5. 实现文件上传和删除功能

  • 当Bucket不存在时先创建并设置访问策略为公开只读
  • 代码中添加Bucket的访问策略的逻辑,主要是通过实体类BucketPolicyConfigDto生成了策略对应的JSON配置
@Slf4j@Controller@RequestMapping("/rustfs")publicclassRustFSController{@AutowiredprivateS3Clients3Client;@Value("${rustfs.bucketName}")privateStringBUCKET_NAME;@Value("${rustfs.endpoint}")privateStringENDPOINT;/** * 文件上传 */@PostMapping(value="/upload",consumes=MediaType.MULTIPART_FORM_DATA_VALUE)@ResponseBodypublicResponseEntity<RustFSUploadResult>upload(@RequestPart("file")MultipartFilefile){// 判断Bucket是否存在if(!bucketExists(BUCKET_NAME)){// 创建Buckets3Client.createBucket(CreateBucketRequest.builder().bucket(BUCKET_NAME).build());log.info("Bucket created: {}",BUCKET_NAME);// 添加Bucket的访问策略//String policy = JSONUtil.toJsonStr(createBucketPolicyConfigDto(BUCKET_NAME));Stringpolicy=JSON.toJSONString(createBucketPolicyConfigDto(BUCKET_NAME));log.info(policy);PutBucketPolicyRequestpolicyReq=PutBucketPolicyRequest.builder().bucket(BUCKET_NAME).policy(policy).build();s3Client.putBucketPolicy(policyReq);}else{log.info("Bucket already exists.");}// 上传文件try{s3Client.putObject(PutObjectRequest.builder().bucket(BUCKET_NAME).key(file.getOriginalFilename()).contentType(file.getContentType()).build(),RequestBody.fromInputStream(file.getInputStream(),file.getSize()));RustFSUploadResultuploadResult=newRustFSUploadResult();uploadResult.setName(file.getOriginalFilename());uploadResult.setUrl(ENDPOINT+"/"+BUCKET_NAME+"/"+file.getOriginalFilename());returnResponseEntity.ok(uploadResult);}catch(IOExceptione){e.printStackTrace();}returnResponseEntity.ok(null);}/** * 文件删除 */@PostMapping(value="/delete")@ResponseBodypublicResponseEntity<String>delete(@RequestParam("objectName")StringobjectName){// 删除对象s3Client.deleteObject(DeleteObjectRequest.builder().bucket(BUCKET_NAME).key(objectName).build());returnResponseEntity.ok(null);}/** * 判断Bucket是否存在 */privatebooleanbucketExists(StringbucketName){try{s3Client.headBucket(request->request.bucket(bucketName));returntrue;}catch(NoSuchBucketExceptionexception){returnfalse;}}/** * 创建存储桶的访问策略,设置为只读权限 */privateBucketPolicyConfigDtocreateBucketPolicyConfigDto(StringbucketName){BucketPolicyConfigDto.Statementstatement=BucketPolicyConfigDto.Statement.builder().Effect("Allow").Principal(BucketPolicyConfigDto.Principal.builder().AWS(newString[]{"*"}).build()).Action(newString[]{"s3:GetObject"}).Resource(newString[]{"arn:aws:s3:::"+bucketName+"/*"}).build();returnBucketPolicyConfigDto.builder().Version("2012-10-17").Statement(CollUtil.toList(statement)).build();}}
http://www.jsqmd.com/news/496712/

相关文章:

  • 京东e卡回收正规平台怎么选择? - 猎卡回收公众号
  • 基于Java的YOLO光伏板巡检系统:无人机图像实时处理与边缘计算优化
  • 2026 年全国优质焦磷酸二氢二钠靠谱厂家推荐 实力强口碑好的直销企业盘点 - 深度智识库
  • HarmonyOS 6 渐变颜色通用属性实战教程(linear/radial/sweep)
  • 基于RocketPy的液氧甲烷不锈钢火箭陆地发射完整仿真系统
  • 洛谷:P2615 [NOIP 2015 提高组] 神奇的幻方
  • 2026权威支护锚杆厂家推荐航德天下实力入选:涨壳式锚杆/灌浆锚杆/组合锚杆/自进式锚杆/螺纹锚杆/隧道锚杆/选择指南 - 优质品牌商家
  • 将大型 CSV 文件按指定行数拆分到 Excel 的不同工作表中
  • 事件触发控制代码及其对应参考文献
  • 小型化设备精准调节方案:PKH30梯形丝杆模组(±0.05mm)非标定制技术解析与案例
  • 【C++笔记5】类和对象(构造函数、析构函数、拷贝构造函数、赋值运算符重载)
  • 2026年物流专线公司专业选型指南:工厂物流、大件货运与长途整车运输怎么选? - 品牌推荐官
  • 西门子S7-1200 PLC工业污水处理系统:基于博途V13sp1的WinCC画面组态与仿真报告
  • 追剪算法:让机械加工更智能
  • 天猫超市卡回收的简单方法,安心转让渠道推荐 - 京回收小程序
  • 春日桌搭新首选!ROG魔霸9 Mini:3L 迷你机身,塞下锐龙 9+RTX5070
  • 高级特性之dubbo超时机制及集群容错机制
  • comsol数值模拟。 金属合金凝固数值模拟,连铸过程数值模拟,相场流场温度场,坯壳厚度计算
  • burpsuite详细安装教程及功能讲解
  • 基于全阶磁链观测器的异步电机矢量控制
  • 3月17日打卡
  • AI 硬件隐私困境下的市场博弈与未来走向
  • 批量PPT处理工具
  • OpenCV 实战:多角度模板匹配(旋转不变性实现)
  • simulink仿真模型,同步电机死区补偿,自适应补偿,图一前面开了补偿,后面关了补偿,可以看...
  • Linux 的 cat 命令
  • 不同构型混合动力汽车模型及控制策略,包括P2、P1+P3、P2+P3、P1+P2+P4、P1+...
  • 智慧农业之102种农业害虫目标检测系统 yolo格式农业害虫图像识别系统(数据集+模型+界面) 第10568期
  • 2026年评价高的水帘柜公司推荐:pp喷淋塔/rco沸石转轮设备/不锈钢喷淋塔/催化燃烧设备/喷塑流水线/选择指南 - 优质品牌商家
  • COMSOL模型中的双活塞协作运动:从理论到实践