潍坊网站开发高手,重庆市设计院,辽宁住房和建设厅网站,网站如何配置域名是什么
MinIO 是一个高性能的分布式对象存储服务#xff0c;适合存储非结构化数据#xff0c;如图片#xff0c;音频#xff0c;视频#xff0c;日志等。对象文件最大可以达到5TB。
安装启动
mkdir -p /usr/local/minio
cd /usr/local/minio# 下载安装包
wget https:/…是什么
MinIO 是一个高性能的分布式对象存储服务适合存储非结构化数据如图片音频视频日志等。对象文件最大可以达到5TB。
安装启动
mkdir -p /usr/local/minio
cd /usr/local/minio# 下载安装包
wget https://dl.min.io/server/minio/release/linux-amd64/minio下载完毕后
在当前minio目录下会出现一个minio文件
# 给予权限
chmod x minio# 创建minio文件存储目录及日志目录
mkdir -p /usr/local/minio/data
mkdir -p /usr/local/minio/logs然后在 /usr/local/minio/目录下新建一个run.sh并编辑以下内容
vim run.sh然后将以下内容保存到run.sh,并为其赋予执行权限chmod ux run.sh
run.sh内容如下
#!/bin/bash
export MINIO_ACCESS_KEYminio
export MINIO_SECRET_KEYminio123456
# nohup启动服务 指定文件存放路径 /root/data 还有设置日志文件路径 /root/minio/log
nohup ./minio server --address :9000 --console-address :9001 /usr/local/minio/data /usr/local/minio/logs/minio.log 21 启动minIO
# 启动minio服务
./run.sh
# 查看日志
tail -f /usr/local/minio/logs/minio.log 平台使用
地址http://127.0.0.1:9000注意开放对应端口9000、9001【当端口 9000 用于连接到 API 时MinIO 会自动将浏览器访问重定向到 MinIO 控制台9001。】
输入账号密码后
创建bucket名字随意创建完成后服务器/usr/local/minio/data下也会创建这个文件目录 http://www.dedeyun.com/it/java/102599.html
SpringBoot集成MinIO
1.添加依赖 dependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion8.4.1/version/dependency2.配置文件
spring:minio:endpoint: http://124.222.253.33:9000access-key: miniosecret-key: minio123456bucket-name: fileservlet:multipart: # 上传文件最大大小max-file-size: 1024MBmax-request-size: 1024MB3.配置类创建客户端
Data
Component
ConfigurationProperties(prefix spring.minio)
public class MinioConfig {private String endpoint;private String accessKey;private String secretKey;Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();}
}4.核心业务类
仅有一些基础操作
Slf4j
Service
public class FileService {Autowiredprivate MinioClient minioClient;private static final String SEPARATOR /;Value(${spring.minio.bucket-name})private String bucketName;/*** 上传文件** param file 文件对象* param id 设备ID*/public void uploadFile(MultipartFile file, Long id) {try {// 创建bucketif (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());}// 同名文件会进行覆盖String objectName file.getOriginalFilename();CleanupInputStream inputStream file.getInputStream();minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(id SEPARATOR objectName) // 多文件夹.stream(inputStream, file.getSize(), -1).contentType(file.getContentType()).build());} catch (Exception e) {log.error(文件上传失败{}, e.getMessage());throw new RuntimeException(文件上传失败请重新上传);}}/*** 删除文件** param path 文件路径*/public void removeObject(String path) {try {minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(path).build());} catch (Exception e) {log.error(文件删除失败{}, e.getMessage());throw new RuntimeException(文件删除失败请重新删除);}}/*** 文件列表** param id 设备ID*/public ListFileInfo listFiles(Long id) {IterableResultItem results minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).recursive(true).build());ListFileInfo infos new ArrayList();results.forEach(r - {FileInfo info new FileInfo();try {Item item r.get();// 最多一层文件夹String path item.objectName();int idx path.indexOf(SEPARATOR);if (path.substring(0, idx).equals(id.toString())) {info.setPath(path);info.setFileName(path.substring(idx 1));info.setSize(item.size());infos.add(info);}} catch (Exception e) {e.printStackTrace();}});return infos;}/*** 下载文件** param response response* param path 文件路径*/public void downFile(HttpServletResponse response, String path) {try {CleanupOutputStream outputStream response.getOutputStream();CleanupInputStream inputStream minioClient.getObject(GetObjectArgs.builder().bucket(this.bucketName).object(path).build());response.reset();String fileName path.substring(path.indexOf(SEPARATOR) 1);response.setHeader(Content-Disposition, attachment;filename URLEncoder.encode(fileName.substring(fileName.lastIndexOf(SEPARATOR) 1), UTF-8));response.setContentType(application/octet-stream);response.setCharacterEncoding(UTF-8);FileCopyUtils.copy(inputStream, outputStream);} catch (Throwable e) {log.error(文件下载失败{}, e.getMessage());throw new RuntimeException(文件下载失败请重新下载);}}
}controller
RestController
public class FileController {Autowiredprivate FileService fileService;PostMapping(/upload)public String uploadFile(RequestParam(file) MultipartFile file, Long id) {fileService.uploadFile(file, id);return 上传成功;}GetMapping(/download)public String downloadFile(HttpServletResponse response, String path) {fileService.downFile(response, path);return 下载成功;}DeleteMapping(/delete)public String deleteFile(String path) {fileService.removeObject(path);return 删除成功;}GetMapping(/list)public ListFileInfo listFiles(Long id) {return fileService.listFiles(id);}
}