feat(新增): 上传文件,配置minio
This commit is contained in:
parent
6a482f8e3c
commit
2e3cce4576
|
@ -7,7 +7,7 @@ import org.springframework.context.annotation.Configuration;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@ConfigurationProperties(prefix = "bunny.spzx")
|
@ConfigurationProperties(prefix = "bunny")
|
||||||
@Data
|
@Data
|
||||||
public class InterceptorsProperties {
|
public class InterceptorsProperties {
|
||||||
private List<String> noAuthUrls;
|
private List<String> noAuthUrls;
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.atguigu.properties;
|
||||||
|
|
||||||
|
import io.minio.MinioClient;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@ConfigurationProperties(prefix = "bunny.minio")
|
||||||
|
@Data
|
||||||
|
public class MinioProperties {
|
||||||
|
private String endpointUrl;
|
||||||
|
private String accessKey;
|
||||||
|
private String secretKey;
|
||||||
|
private String bucketName;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public MinioClient minioClient() {
|
||||||
|
return MinioClient.builder().endpoint(endpointUrl).credentials(accessKey, secretKey).build();
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,27 @@
|
||||||
|
package com.atguigu.spzx.manger.controller;
|
||||||
|
|
||||||
|
import com.atguigu.spzx.manger.service.FileUploadService;
|
||||||
|
import com.atguigu.spzx.model.vo.result.Result;
|
||||||
|
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 = "上传文件接口")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/admin/system")
|
||||||
|
public class FileUploadController {
|
||||||
|
@Autowired
|
||||||
|
private FileUploadService fileUploadService;
|
||||||
|
|
||||||
|
@Operation(summary = "上传文件", description = "上传文件内容")
|
||||||
|
@PostMapping("fileUpload")
|
||||||
|
public Result<String> fileUploadService(@RequestParam(value = "file") MultipartFile file) {
|
||||||
|
String fileUrl = fileUploadService.uploadFile(file);
|
||||||
|
return Result.success(fileUrl);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.atguigu.spzx.manger.service;
|
||||||
|
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
public interface FileUploadService {
|
||||||
|
/**
|
||||||
|
* 上传文件
|
||||||
|
*
|
||||||
|
* @param file 上传的文件
|
||||||
|
* @return file的地址
|
||||||
|
*/
|
||||||
|
String uploadFile(MultipartFile file);
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
package com.atguigu.spzx.manger.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import com.atguigu.exception.BunnyException;
|
||||||
|
import com.atguigu.properties.MinioProperties;
|
||||||
|
import com.atguigu.spzx.manger.service.FileUploadService;
|
||||||
|
import io.minio.BucketExistsArgs;
|
||||||
|
import io.minio.MakeBucketArgs;
|
||||||
|
import io.minio.MinioClient;
|
||||||
|
import io.minio.PutObjectArgs;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@Slf4j
|
||||||
|
public class FileUploadServiceImpl implements FileUploadService {
|
||||||
|
@Autowired
|
||||||
|
MinioClient minioClient;
|
||||||
|
@Autowired
|
||||||
|
private MinioProperties minioProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传文件
|
||||||
|
*
|
||||||
|
* @param file 上传的文件
|
||||||
|
* @return file的地址
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String uploadFile(MultipartFile file) {
|
||||||
|
String bucketName = minioProperties.getBucketName();
|
||||||
|
String dir = DateUtil.format(new Date(), "yyyy-MM-dd");
|
||||||
|
String uuid = UUID.randomUUID().toString();
|
||||||
|
String filename = dir + "/" + uuid + "-" + file.getOriginalFilename();
|
||||||
|
|
||||||
|
try {
|
||||||
|
boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
|
||||||
|
// 判断桶是否存在
|
||||||
|
if (!bucketExists) {
|
||||||
|
log.warn("minio桶不存在:{}", bucketName);
|
||||||
|
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
|
||||||
|
}
|
||||||
|
|
||||||
|
minioClient.putObject(PutObjectArgs.builder().bucket(bucketName)
|
||||||
|
.stream(file.getInputStream(), file.getSize(), -1)
|
||||||
|
.object(filename).build());
|
||||||
|
|
||||||
|
return minioProperties.getEndpointUrl() + "/" + minioProperties.getBucketName() + "/" + filename;
|
||||||
|
} catch (Exception exception) {
|
||||||
|
throw new BunnyException(exception.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,8 +11,13 @@ bunny:
|
||||||
port: 6379
|
port: 6379
|
||||||
database: 2
|
database: 2
|
||||||
|
|
||||||
spzx:
|
minio:
|
||||||
noAuthUrls:
|
endpointUrl: "http://129.211.31.58:9000"
|
||||||
- /admin/system/index/login
|
bucket-name: spzx-bucket
|
||||||
- /admin/system/index/generateValidateCode
|
accessKey: "bunny"
|
||||||
- /v3/**
|
secretKey: "02120212"
|
||||||
|
|
||||||
|
noAuthUrls:
|
||||||
|
- /admin/system/index/login
|
||||||
|
- /admin/system/index/generateValidateCode
|
||||||
|
- /v3/**
|
||||||
|
|
|
@ -37,4 +37,12 @@ mybatis:
|
||||||
configuration:
|
configuration:
|
||||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
||||||
map-underscore-to-camel-case: true
|
map-underscore-to-camel-case: true
|
||||||
auto-mapping-behavior: full
|
auto-mapping-behavior: full
|
||||||
|
|
||||||
|
|
||||||
|
bunny:
|
||||||
|
minio:
|
||||||
|
endpointUrl: ${bunny.minio.endpointUrl}
|
||||||
|
accessKey: ${bunny.minio.accessKey}
|
||||||
|
secretKey: ${bunny.minio.secretKey}
|
||||||
|
bucket-name: ${bunny.minio.bucket-name}
|
||||||
|
|
|
@ -11,8 +11,13 @@ bunny:
|
||||||
port: 6379
|
port: 6379
|
||||||
database: 2
|
database: 2
|
||||||
|
|
||||||
spzx:
|
minio:
|
||||||
noAuthUrls:
|
endpointUrl: "http://129.211.31.58:9000"
|
||||||
- /admin/system/index/login
|
bucket-name: spzx-bucket
|
||||||
- /admin/system/index/generateValidateCode
|
accessKey: "bunny"
|
||||||
- /v3/**
|
secretKey: "02120212"
|
||||||
|
|
||||||
|
noAuthUrls:
|
||||||
|
- /admin/system/index/login
|
||||||
|
- /admin/system/index/generateValidateCode
|
||||||
|
- /v3/**
|
||||||
|
|
|
@ -37,4 +37,12 @@ mybatis:
|
||||||
configuration:
|
configuration:
|
||||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
||||||
map-underscore-to-camel-case: true
|
map-underscore-to-camel-case: true
|
||||||
auto-mapping-behavior: full
|
auto-mapping-behavior: full
|
||||||
|
|
||||||
|
|
||||||
|
bunny:
|
||||||
|
minio:
|
||||||
|
endpointUrl: ${bunny.minio.endpointUrl}
|
||||||
|
accessKey: ${bunny.minio.accessKey}
|
||||||
|
secretKey: ${bunny.minio.secretKey}
|
||||||
|
bucket-name: ${bunny.minio.bucket-name}
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -12,6 +12,40 @@
|
||||||
values (#{id}, #{userName}, #{password}, #{name}, #{phone}, #{avatar}, #{description}, #{status});
|
values (#{id}, #{userName}, #{password}, #{name}, #{phone}, #{avatar}, #{description}, #{status});
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
<!-- 修改用户 -->
|
||||||
|
<update id="updateSysUser">
|
||||||
|
update sys_user
|
||||||
|
set
|
||||||
|
<if test="userName != null and userName != ''">
|
||||||
|
username = #{userName},
|
||||||
|
</if>
|
||||||
|
<if test="password != null and password != ''">
|
||||||
|
password = #{password},
|
||||||
|
</if>
|
||||||
|
<if test="name != null and name != ''">
|
||||||
|
name = #{name},
|
||||||
|
</if>
|
||||||
|
<if test="phone != null and phone != ''">
|
||||||
|
phone = #{phone},
|
||||||
|
</if>
|
||||||
|
<if test="description != null and description != ''">
|
||||||
|
description = #{description},
|
||||||
|
</if>
|
||||||
|
<if test="status != null and status != ''">
|
||||||
|
status = #{status},
|
||||||
|
</if>
|
||||||
|
update_time = now()
|
||||||
|
where id = #{id}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<!-- 根据id删除用户 -->
|
||||||
|
<update id="deleteById">
|
||||||
|
update sys_user
|
||||||
|
set is_deleted = 1,
|
||||||
|
update_time = now()
|
||||||
|
where id = #{id}
|
||||||
|
</update>
|
||||||
|
|
||||||
<!-- 根据username查询用户信息 -->
|
<!-- 根据username查询用户信息 -->
|
||||||
<select id="selectByUsername" resultType="com.atguigu.spzx.model.entity.system.SysUser">
|
<select id="selectByUsername" resultType="com.atguigu.spzx.model.entity.system.SysUser">
|
||||||
select
|
select
|
||||||
|
|
Loading…
Reference in New Issue