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

尚庭公寓-------图片上传接口

配置类编写

package com.nie.lease.common.minio;import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;@Configuration
public class MinioConfiguration {@Value("${minio.endpoint}")private String endpoint;@Value("${minio.access-key}")private String accessKey;@Value("${minio.secret-key}")private String secretKey;@Beanpublic MinioClient minioClient(){return MinioClient.builder().endpoint( endpoint).credentials(accessKey, secretKey).build();}
}

属性

server:port: 8080spring:datasource:type: com.zaxxer.hikari.HikariDataSourceurl: jdbc:mysql://192.168.10.101:3306/lease?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8username: rootpassword: Niehaihai.123hikari:connection-test-query: SELECT 1 # 自动检测连接connection-timeout: 60000 # 数据库连接超时时间,默认30秒idle-timeout: 500000 # 空闲连接存活最大时间,默认60000010分钟)max-lifetime: 540000 # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认180000030分钟maximum-pool-size: 12 # 连接池最大连接数,默认是10minimum-idle: 10 # 最小空闲连接数量pool-name: SPHHikariPool # 连接池名称# 用于打印对象生成的sql语句,便于调试
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplminio:endpoint: http://192.168.10.101:9000access-key: minioadminsecret-key: minioadminbucket-name: lease

controller类

package com.nie.lease.web.admin.controller.apartment;import com.nie.lease.common.result.Result;
import com.nie.lease.web.admin.service.FileService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;@Tag(name = "文件管理")
@RequestMapping("/admin/file")
@RestController
public class FileUploadController {@Autowiredprivate FileService fileService;@Operation(summary = "上传文件")@PostMapping("upload")public Result<String> upload(@RequestParam MultipartFile file) {String url=fileService.upload(file);return Result.ok(url);}}

service接口类

package com.nie.lease.web.admin.service;import org.springframework.web.multipart.MultipartFile;public interface FileService {String upload(MultipartFile file);
}

service实现类

package com.nie.lease.web.admin.service.impl;import com.nie.lease.web.admin.service.FileService;
import io.minio.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;@Service
public class FileServiceImpl implements FileService {@Autowiredprivate MinioClient minioClient;@Value("${minio.endpoint}")private String endpoint;@Value("${minio.bucket-name}")private String bucketName;public String upload(MultipartFile file) {try {boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());if (!bucketExists){minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(createBucketPolicyConfig(bucketName)).build());}String filename = new SimpleDateFormat("yyyyMMdd").format(new Date()) +"/" + UUID.randomUUID() + "-" + file.getOriginalFilename();minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).stream(file.getInputStream(),file.getSize(),-1).object(filename).contentType(file.getContentType()).build());return String.join("/",endpoint,bucketName,filename);} catch (Exception e) {e.printStackTrace();}return null;}private String createBucketPolicyConfig(String bucketName) {return """{"Statement" : [ {"Action" : "s3:GetObject","Effect" : "Allow","Principal" : "*","Resource" : "arn:aws:s3:::%s/*"} ],"Version" : "2012-10-17"}""".formatted(bucketName);}}

测试结果: 当我们随便上传一张图片后
在这里插入图片描述
他会给我们返回一个URL

在这里插入图片描述

我们用浏览器访问他一下 发现他成功被访问 这说明我们配置正确
在这里插入图片描述

http://www.dtcms.com/a/281835.html

相关文章:

  • 推客系统开发:从零构建高并发社交平台的技术实践
  • Python爬虫实战:研究PyYAML库相关技术
  • 多维动态规划题解——不同路径【LeetCode】递推写法空间优化
  • 【Qt开发】Qt的背景介绍(二)-> 搭建Qt开发环境
  • 从混沌到秩序:数据科学的热力学第二定律破局——线性回归的熵减模型 × 最小二乘的能量最小化 × 梯度下降的负反馈控制系统,用物理定律重构智能算法的统一场论
  • Blender 云渲染高效流程:渲染 101 集群加速实战​
  • 硬件产品的技术资料管控是确保研发可追溯、生产可复制、质量可控制的核心环节。
  • Linux 716 数据库迁移
  • NodeJS Express 静态文件、中间件、路由案例
  • iPhone 数据擦除软件评测(最新且全面)
  • 为什么要使用nginx?
  • 网络基础10 业务访问控制--ACL与包过滤
  • springboot如何redis锁
  • python学习---dayday6
  • 基于华为欧拉系统安装FileGator文件管理器
  • git本地的操作
  • Java 增强 switch 语句详解:从基础到进阶的全面指南
  • 基于conda包的环境创建、激活、管理与删除
  • 如何卸载SQLServer
  • MybatisPlus由浅入深
  • Neo4j Python 驱动库完整教程(带输入输出示例)
  • Supervisor 使用教程:进程守护的最佳实践指南
  • 06-C语言:第06天笔记
  • 数据分析与AI丨从传感器到智能决策:数据驱动企业发展与 ESG 创新的全链路实践
  • 18.理解 Python 中的切片赋值
  • OpenCV-Python Tutorial : A Candy from Official Main Page(三)
  • Redis原理之持久化
  • 【构建 SHAP 解释器】X:每个样本的特征表(不能含 label,否则解释不纯粹)。
  • 隐私计算四大主流开源框架:从学术研究到工业落地,附PySyft实战Demo
  • 梁的振动特征函数分析2