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

手机微网站 模板高端大气的广告公司名字

手机微网站 模板,高端大气的广告公司名字,中象做网站怎么样,无需域名网站建设关注#xff1a;CodingTechWork 介绍 在现代的 web 应用中#xff0c;文件上传和下载是常见的需求。MinIO 是一个开源的高性能分布式对象存储服务#xff0c;可以用来存储和管理大量的非结构化数据#xff0c;如图片、视频、日志文件等。本文将介绍如何在 Spring Boot 应用…关注CodingTechWork 介绍 在现代的 web 应用中文件上传和下载是常见的需求。MinIO 是一个开源的高性能分布式对象存储服务可以用来存储和管理大量的非结构化数据如图片、视频、日志文件等。本文将介绍如何在 Spring Boot 应用中结合 MinIO 来实现文件的上传和下载功能并使用 Feign 客户端进行远程调用文件上传和下载的服务。 MinIO 相关介绍 MinIO 是一个高性能的分布式对象存储系统兼容 Amazon S3 API通常用于存储和管理大量非结构化数据如图片、视频、备份、日志等。它提供了与 S3 完全兼容的 API使得开发者能够使用相同的工具和库与其进行交互。MinIO 被设计为云原生适用于在 Docker、Kubernetes 和虚拟机中运行。 MinIO 特点 高性能支持高吞吐量、高并发的读写操作适用于需要大规模数据存储的应用。S3 兼容MinIO 实现了完整的 Amazon S3 API支持通过现有的 S3 客户端、SDK 和工具来进行交互。高可扩展性支持水平扩展支持分布式部署能够在多台机器上运行并提供统一的对象存储服务。轻量级MinIO 是一个轻量级的应用程序易于部署和管理可以在资源受限的环境中运行如单机或者小型集群。支持对象加密MinIO 支持对象级加密可以为上传到存储中的对象加密保证数据安全。支持版本控制MinIO 支持对象版本管理允许对存储中的文件进行版本控制。 MinIO 核心概念 桶Bucket 在 MinIO 中桶类似于文件系统中的文件夹。每个桶用于存储一组对象。每个桶都可以有独立的权限配置。存储在桶中的对象有唯一的标识符通常是对象的文件名。 对象Object 对象是 MinIO 存储的基本单位类似于文件系统中的文件。对象由数据和元数据组成可以是任何类型的数据如文本、图像、视频等。 对象键Object Key 对象键是对象在桶中的唯一标识符通常对应于文件名。 访问密钥和密钥Access Key Secret Key MinIO 使用访问密钥Access Key和密钥Secret Key进行身份验证类似于 S3。用户可以配置访问密钥和密钥以确保数据的访问权限。 MinIO API 介绍 MinIO 的 API 设计遵循 S3 API几乎所有 S3 的 API 都可以在 MinIO 中使用。以下是 MinIO 支持的常见操作和 API Bucket 操作 创建桶Create Bucket创建一个新桶来存储对象。 minioClient.makeBucket(mybucket);列举桶List Buckets获取当前 MinIO 实例中所有存在的桶。 ListBucket buckets minioClient.listBuckets();检查桶是否存在Bucket Exists检查桶是否存在。 boolean exists minioClient.bucketExists(mybucket);删除桶Delete Bucket删除桶桶必须为空才能删除。 minioClient.removeBucket(mybucket);对象操作 上传对象Put Object上传一个文件到 MinIO 中指定的桶。 minioClient.putObject(mybucket, myfile.txt, fileInputStream, fileSize, null, null, application/octet-stream);获取对象Get Object从指定桶中获取对象内容。 InputStream inputStream minioClient.getObject(mybucket, myfile.txt);删除对象Remove Object删除 MinIO 存储桶中的某个对象。 minioClient.removeObject(mybucket, myfile.txt);列举对象List Objects列举桶中的所有对象可以按前缀过滤。 IterableResultItem objects minioClient.listObjects(mybucket); for (ResultItem result : objects) {Item item result.get();System.out.println(Object name: item.objectName()); }获取对象元数据Stat Object获取对象的元数据如大小、最后修改时间等。 StatObjectResponse stat minioClient.statObject(mybucket, myfile.txt); System.out.println(Object size: stat.size());文件下载 下载对象Get Object从 MinIO 中下载一个对象并将其存储到本地文件系统。 minioClient.getObject(mybucket, myfile.txt, Paths.get(/path/to/destination));对象版本控制 启用版本控制启用桶的版本控制功能。 minioClient.enableBucketVersioning(mybucket);获取对象版本Get Object Version获取对象的指定版本。 InputStream inputStream minioClient.getObject(mybucket, myfile.txt, versionId);删除对象版本Remove Object Version删除某个版本的对象。 minioClient.removeObject(mybucket, myfile.txt, versionId);权限管理 MinIO 支持基于用户的权限控制可以通过配置桶的访问策略来管理谁可以访问存储中的对象。 设置桶的访问权限Bucket Policy设置桶的访问权限来限制用户对对象的访问。 String policy { \Version\: \2025-01-07\, \Statement\: [ { \Effect\: \Allow\, \Principal\: { \AWS\: \*\ }, \Action\: [ \s3:GetObject\ ], \Resource\: [ \arn:aws:s3:::mybucket/*\ ] } ] }; minioClient.setBucketPolicy(mybucket, policy);MinIO 安全性特性 加密 MinIO 支持两种类型的加密服务端加密SSE和客户端加密CSE。服务端加密会在对象上传到 MinIO 时自动对其进行加密。身份验证与授权 MinIO 使用访问密钥Access Key和密钥Secret Key来进行身份验证。用户可以通过配置 MinIO 的访问控制列表ACL来限制谁可以访问桶和对象。TLS/SSL 支持 MinIO 支持通过 TLS即 HTTPS加密通信来保护数据传输安全。 项目结构 本项目的文件上传和下载功能将分成两个部分 minio 服务端本地服务处理文件上传Feign 客户端模拟远程文件上传请求 file-upload-demo │ ├── src/main/java/com/example/fileupload │ ├── controller │ │ └── FileController.java │ ├── service │ │ └── FileService.java │ ├── feign │ │ └── FileFeignClient.java │ ├── FileUploadDemoApplication.java │ └── ... ├── pom.xml └── resources└── application.propertiesMaven 依赖 在 pom.xml 中添加以下依赖 dependencies!-- Spring Boot Web 依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Feign 依赖 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency!-- minio 客户端依赖 --dependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion8.3.5/version/dependency!-- 文件上传需要的依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-thymeleaf/artifactId/dependency /dependencies 同时在 application.properties 中配置文件上传大小限制 properties配置文件 # MinIO 配置 minio.urlhttp://localhost:9000 minio.access-keyyour-access-key minio.secret-keyyour-secret-key minio.bucket-namemybucket# 文件上传大小限制 spring.servlet.multipart.max-file-size10MB spring.servlet.multipart.max-request-size10MB代码示例 MinIO 配置 创建一个 MinIO 配置类来初始化 MinIO 客户端。 MinioConfig.java package com.example.fileupload.config;import io.minio.MinioClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class MinioConfig {Value(${minio.url})private String minioUrl;Value(${minio.access-key})private String accessKey;Value(${minio.secret-key})private String secretKey;Value(${minio.bucket-name})private String bucketName;Beanpublic MinioClient minioClient() {try {MinioClient minioClient MinioClient.builder().endpoint(minioUrl).credentials(accessKey, secretKey).build();// 如果桶不存在则创建桶boolean isExist minioClient.bucketExists(bucketName);if (!isExist) {minioClient.makeBucket(bucketName);}return minioClient;} catch (Exception e) {throw new RuntimeException(初始化 MinIO 客户端失败, e);}} }Controller 层文件上传与下载接口 在 Controller 层我们定义文件上传和下载的接口。上传文件时将文件存储到 MinIO 中下载文件时从 MinIO 拉取文件。 FileController.java package com.example.fileupload.controller;import com.example.fileupload.service.FileService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile;import java.io.IOException;RestController RequestMapping(/api/files) public class FileController {Autowiredprivate FileService fileService;// 文件上传接口PostMapping(/upload)public ResponseEntityString uploadFile(RequestParam(file) MultipartFile file) {try {String fileUrl fileService.uploadFile(file);return ResponseEntity.ok(文件上传成功: fileUrl);} catch (IOException e) {return ResponseEntity.status(500).body(文件上传失败: e.getMessage());}}// 文件下载接口GetMapping(/download/{filename})public ResponseEntityInputStreamResource downloadFile(PathVariable String filename) {try {InputStreamResource resource fileService.downloadFile(filename);return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, attachment;filename filename).contentType(MediaType.APPLICATION_OCTET_STREAM).body(resource);} catch (IOException e) {return ResponseEntity.status(500).body(null);}} }Service 层文件处理业务 在 Service 层我们定义实际的文件处理逻辑包括文件上传和下载。我们使用 MultipartFile 来接收文件并将其保存到服务器上。 FileService.java package com.example.fileupload.service;import io.minio.MinioClient; import io.minio.errors.MinioException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile;import java.io.IOException; import java.io.InputStream;Service public class FileService {Autowiredprivate MinioClient minioClient;private final String bucketName mybucket; // 从配置中加载桶名// 文件上传方法public String uploadFile(MultipartFile file) throws IOException {try {// 获取文件输入流InputStream fileInputStream file.getInputStream();// 上传文件到 MinIOminioClient.putObject(bucketName, file.getOriginalFilename(), fileInputStream, file.getSize(), null, null, application/octet-stream);return http://localhost:9000/ bucketName / file.getOriginalFilename(); // MinIO 文件 URL} catch (MinioException | IOException e) {throw new IOException(上传文件失败, e);}}// 文件下载方法public InputStreamResource downloadFile(String filename) throws IOException {try {// 获取文件输入流InputStream fileInputStream minioClient.getObject(bucketName, filename);return new InputStreamResource(fileInputStream);} catch (MinioException | IOException e) {throw new IOException(下载文件失败, e);}} } Feign 客户端远程调用文件上传下载服务 Feign 是一个声明式的 HTTP 客户端它简化了 HTTP 请求的调用过程。在这个例子中我们使用 Feign 来调用远程的文件上传和下载接口。 FileFeignClient.java package com.example.fileupload.feign;import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*;FeignClient(name file-upload-service, url http://localhost:8080/api/files) public interface FileFeignClient {PostMapping(/upload)String uploadFile(RequestParam(file) MultipartFile file);GetMapping(/download/{filename})byte[] downloadFile(PathVariable(filename) String filename); }Feign 使用示例 在 Service 层我们可以使用 Feign 客户端来调用远程的文件上传和下载接口。 FileService.java使用 Feign 上传下载文件 package com.example.fileupload.service;import com.example.fileupload.feign.FileFeignClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile;Service public class FileService {Autowiredprivate FileFeignClient fileFeignClient;// 使用 Feign 上传文件public String uploadFileViaFeign(MultipartFile file) {return fileFeignClient.uploadFile(file);}// 使用 Feign 下载文件public byte[] downloadFileViaFeign(String filename) {return fileFeignClient.downloadFile(filename);} }总结 本文通过详细的代码示例展示了如何将 MinIO 集成到 Spring Boot 中来实现文件的上传和下载。通过 Feign 客户端的远程调用可以将文件上传和下载的请求发送到远程服务中进行处理。 参考资料 Spring Boot 官方文档 Spring Cloud Feign 官方文档
http://www.hkea.cn/news/14461725/

相关文章:

  • 广州建设官方网站建设工程服务中心是做什么的
  • 宁波免费自助建站模板南昌网站建设信息
  • wild合成版是哪个网站做的章丘做网站单位哪家好
  • 鹰潭做网站的直链平台
  • 建设企业门户网站网站营销方案模板
  • 织梦网站做关键词网站建设分站要备案
  • 网站建设数据库配置网站上的信息可以做证据吗
  • 做网站代理去拉人网站建设辶首先金手指十四
  • 好吊顶网站三大电商平台是哪三个
  • 上海人才网官网招聘招聘外包seo公司
  • 泸州做网站网站开发人员岗位
  • 上海网站制作团队购物网站建设报价
  • 网站discuz迁移怎么做佛山网站搭建公司
  • 做挂件的网站嘉兴学网站建设
  • 购物网站开发jdk企业门户网站案例
  • linux做网站哪个版本好建筑设计公司取名
  • 网站开发的工作合肥seo服务商
  • 做网站哪里买空间好网站后台怎么管理
  • 一元夺宝网站建设2017aws wordpress ssl
  • 网站建设文化效果江门网站建设设计
  • 网站建设分析从哪几个方面公司网站用什么程序
  • 怎样上传网站到百度已认证网站服务费怎么做
  • 媒体网站的销售怎么做室内设计效果图欧式风格
  • 江西网站建设优化服务wordpress取消默认图片
  • 网站下载地址软件商店oppo官方下载
  • 欧美网站模板下载英铭长沙网站建设
  • 苏州网站设计公司价格wordpress 商城站下载
  • 东莞浩智网站建设多少钱wordpress 判断语句
  • 贵州企业网站建设设计专业的英文网站建设
  • 新余百度网站建设wordpress 登陆信息