springBoot配置minio并上传下载文件

当我们在本机安装完minio,启动并创建桶后,接下来需要在项目中进行配置。
1.pom文件导入依赖

<dependency>
    <groupId>com.sinosoft</groupId>
    <artifactId>sinosoft_framework_oss_minio</artifactId>
    <version>1.0.0</version>
</dependency>
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
</dependency>

2.配置文件

#minio的配置信息
oss:
  minio:
    #端口
    endpoint: http://127.0.0.1:9005/
    #账号
    accessKey: minioadmin
    #密码
    secretKey: minioadmin
    #桶名称
    bucketName: test
    #默认 10分钟,单位为秒
    preview-expires: 600

3.controller层代码

import com.sinosoft.springbootplus.common.api.ApiResult;
import com.sinosoft.springbootplus.common.controller.BaseController;
import com.sinosoft.springbootplus.files.application.service.impl.SggpFjFileServiceImpl;
import com.sinosoft.springbootplus.files.domain.entity.SggpFjFile;
import com.sinosoft.springbootplus.oss.OssClient;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

/**
 * <pre>
 * 附件管理 API接口
 * </pre>
 *
 * @author mc
 * @since 2022-05-16
 */
@Slf4j
@RestController
@RequestMapping("/sggpfile")
@Api(tags = "附件管理 API", description = "提供附件管理相关的 Rest API")
public class SggpFileController extends BaseController {
    private SggpFjFileServiceImpl sggpFjFileServiceImpl;

    SggpFileController(SggpFjFileServiceImpl sggpFjFileServiceImpl) {
        this.sggpFjFileServiceImpl = sggpFjFileServiceImpl;
    }
    
    //上传文件
    @PostMapping("/upload")
    public ApiResult<SggpFjFile> upload(MultipartFile multipartFile) {
        return sggpFjFileServiceImpl.upload(multipartFile);
    }

	//下载文件接口
    @GetMapping("/download")
    public void download(@RequestParam(value = "id") Long id,
                         HttpServletResponse res) throws Exception {
        sggpFjFileServiceImpl.download(id,res);
    }

	//删除文件接口
    @GetMapping("/delete/{id}")
    public ApiResult<String> delete(@PathVariable("id") Long id) throws Exception {
        sggpFjFileServiceImpl.deleteSggpFjFile(id);
        return ApiResult.ok("删除成功");
    }
}

4.service实现类

package com.sinosoft.springbootplus.files.application.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sinosoft.springbootplus.archive.domain.entity.SggpLsbjArchive;
import com.sinosoft.springbootplus.common.api.ApiResult;
import com.sinosoft.springbootplus.files.domain.entity.SggpFjFile;
import com.sinosoft.springbootplus.files.domain.mapper.SggpFjFileMapper;
import com.sinosoft.springbootplus.mybatis.service.impl.BaseServiceImpl;
import com.sinosoft.springbootplus.oss.OssClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;


/**
 * <pre>
 * 附件表 服务实现类
 * </pre>
 *
 * @author mc
 * @since 2022-05-16
 */
@Slf4j
@Service
public class SggpFjFileServiceImpl extends BaseServiceImpl<SggpFjFileMapper, SggpFjFile>  {
    private OssClient ossClient;
    private SggpFjFileMapper sggpFjFileMapper;
        SggpFjFileServiceImpl (SggpFjFileMapper sggpFjFileMapper,OssClient ossClient){
            this.sggpFjFileMapper =sggpFjFileMapper;
            this.ossClient =ossClient;
        }


    @Transactional(rollbackFor = Exception.class)
    public boolean saveSggpFjFile(SggpFjFile sggpFjFile)  {
        return super.save(sggpFjFile);
    }

    @Transactional(rollbackFor = Exception.class)
    public boolean updateSggpFjFile(SggpFjFile sggpFjFile) {
        return super.updateById(sggpFjFile);
    }

    @Transactional(rollbackFor = Exception.class)
    public boolean deleteSggpFjFile(Long id) throws Exception {
        SggpFjFile sggpFjFile = sggpFjFileMapper.selectById(id);
        ossClient.delFile(sggpFjFile.getFileName());
        return super.removeById(id);
    }

    public ApiResult<SggpFjFile> upload(MultipartFile multipartFile){
        String originalFilename = multipartFile.getOriginalFilename();
        String fileName = ossClient.uploadFile(multipartFile);
        SggpFjFile sggpFjFile = new SggpFjFile()
                .setFileName(fileName)
                .setOriginalFilename(originalFilename);
        boolean isSussess = saveSggpFjFile(sggpFjFile);
        if(!isSussess){
            return ApiResult.fail("文件上传失败!");
        }else{
            return ApiResult.ok(sggpFjFile);
        }
    }

    public void download(Long id, HttpServletResponse res) throws Exception {
        SggpFjFile sggpFjFile = sggpFjFileMapper.selectById(id);
        ossClient.downloadFile(sggpFjFile.getFileName(),sggpFjFile.getOriginalFilename(), res);
    }

    public List<SggpFjFile> selectSggpFjFileList(Long ownerId){
        QueryWrapper<SggpFjFile> queryWrapper = Wrappers.<SggpFjFile>query()
                .eq("owner_id",ownerId);
        return sggpFjFileMapper.selectList(queryWrapper);
    }

}
好的,关于SpringBoot集成MinIO实现上传下载,我可以为你提供如下的解答: MinIO是一个开源的对象存储服务,支持S3协议,适用于云原生应用场景,具有高可用、高性能、易扩展等特点。SpringBoot是一个快速开发框架,可快速创建基于Spring的应用程序。二者集成后,可以快速实现文件上传下载功能。 首先,通过SpringBoot的依赖管理工具(如Maven或Gradle)引入MinIO的依赖包。然后,配置MinIO的连接信息,包括连接地址、端口、访问密钥等。接下来,通过MinIOJava客户端SDK,实现文件上传下载的逻辑。具体步骤如下: 1. 引入依赖 在pom.xml中添加以下依赖: ``` <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.0.7</version> </dependency> ``` 2. 配置连接信息 可以通过配置文件或者代码方式配置连接信息。以下为代码配置方式: ``` @Configuration public class MinioConfig { @Bean public MinioClient minioClient() throws Exception { String endpoint = "localhost:9000"; String accessKey = "your-access-key"; String secretKey = "your-secret-key"; return MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } } ``` 3. 实现上传下载逻辑 以下为文件上传的示例代码: ``` @Autowired private MinioClient minioClient; public void uploadFile(String bucketName, String objectName, String fileName) throws Exception { // 检查Bucket是否存在,不存在则创建 boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (!found) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } // 上传文件 minioClient.uploadObject(UploadObjectArgs.builder() .bucket(bucketName) .object(objectName) .filename(fileName) .build()); } ``` 以下为文件下载的示例代码: ``` @Autowired private MinioClient minioClient; public void downloadFile(String bucketName, String objectName, String fileName) throws Exception { // 下载文件 minioClient.downloadObject(DownloadObjectArgs.builder() .bucket(bucketName) .object(objectName) .filename(fileName) .build()); } ``` 以上就是SpringBoot集成MinIO实现上传下载的基本步骤,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值