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

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

配置类编写

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.xdnf.cn/news/15645.html

相关文章:

  • 【c++深入系列】:万字详解list(附模拟实现的list源码)
  • 【unitrix】 6.4 类型化数特征(t_number.rs)
  • JavaScript进阶篇——第六章 内置构造函数与内置方法
  • 21、鸿蒙Harmony Next开发:组件导航(Navigation)
  • 主机安全---开源wazuh安装
  • 【Unity】IL2CPP相关理论知识学习
  • Spring MVC中@PathVariable的用法详解
  • AR智能巡检:电力行业数字化转型的“加速器”
  • Java 8新特性 函数式编程实践
  • python基础②-数据结构
  • 第二十一 篇 PDF文档自动化:Python一键合并、分割、水印、提取与加密解密!你的PDF全能管家!
  • 《通信原理》学习笔记——第二章
  • 【前端】Vue3 前端项目实现动态显示当前系统时间
  • 【TVM 教程】FAQ
  • 筑牢网络安全防线:DDoS/CC 攻击全链路防护技术解析
  • Hadoop(三)
  • PyTorch 损失函数详解:从理论到实践
  • Qt小组件 - 7 SQL Thread Qt访问数据库ORM
  • Uniapp中双弹窗为什么无法显示?
  • 玩转Docker | 使用Docker部署bender个人导航页工具
  • 利用Java自定义格式,循环导出数据、图片到excel
  • 【论文阅读 | CVPR 2023 |CDDFuse:基于相关性驱动的双分支特征分解的多模态图像融合】
  • lua(xlua)基础知识点记录
  • 【前端】在Vue3中绘制多系列柱状图与曲线图
  • 量子比特耦合与系统集成:量子计算硬件的核心突破
  • 入门华为数通,HCIA/HCIP/HCIE该怎么选?
  • 2025年自动化工程、物联网与计算机应用国际会议(AEITCA 2025)
  • Java基础:分支/循环/数组
  • PLC-BMS电力载波通信技术深度解析:智能电网与储能系统的融合创新
  • 【WRFDA数据第一期】WRFDA Free Input 数据网页