Minio 整合springboot 开发 实现文件上传

minio依赖这里就不引入了。方便使用。

这里分别实现,文件的上传,查询、及其删除功能。

package com.gxzc.dsppm.web.controller;

import com.gxzc.dsppm.web.api.enums.CommodityEnum;
import com.gxzc.dsppm.web.service.UploadFileService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.lan.iti.common.model.response.ApiResult;
import org.lan.iti.common.scanner.annotation.ITIApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 
 * @date Create in 18:10 2020/5/7 0007
 * @description 文件上传到文件服务器minio
 */
@ITIApi
@RestController
@RequestMapping(value = "uploadminio")
@AllArgsConstructor
@Api(tags = "文件上传接口")
public class UploadMinioController {

    @Autowired
    private UploadFileService uploadFileService;

    @ITIApi
    @ApiOperation(value = "使用minio文件上传(支持多个文件和单个文件的上传)")
    @PostMapping(value = "/uploadFile")
    @ApiImplicitParams({
            @ApiImplicitParam(dataType = "MultipartFile", name = "files", value = "上传的图片", required = true),
            @ApiImplicitParam(dataType = "String", name = "bucketName", value = "对象存储桶名称", required = true)
    })
    public ApiResult<?> uploadFile(MultipartFile[] files, String bucketName) {
        try {
            List<String> filenames = new ArrayList<>();
            for (MultipartFile multipartFile : files) {
                filenames.add(uploadFileService.uploadFile(multipartFile, bucketName));
            }
            return ApiResult.ok(StringUtils.join(filenames, ","));
        } catch (Exception e) {
            e.printStackTrace();
            return ApiResult.ok(CommodityEnum.ADDSTOCKINFail.getResult(), CommodityEnum.ADDSTOCKINFail.getNumber());
        }
    }


    @ITIApi
    @ApiOperation(value = "获取文件对象")
    @GetMapping(value = "/getFileInfo")
    @ApiImplicitParams({
            @ApiImplicitParam(dataType = "String", name = "objectName" ,value = "需要获取的对象" ,required = true),
            @ApiImplicitParam(dataType = "String", name = "bucketName" ,value = "对象存储桶名称" ,required = true)
    })
    public ApiResult<?> getFileInfo(String objectName, String bucketName) {
        try {
            return ApiResult.ok(uploadFileService.getFileInfo(objectName,bucketName));
        }catch (Exception e){
            e.printStackTrace();
            return ApiResult.ok(CommodityEnum.GETSTOCKINFail.getResult(),CommodityEnum.GETSTOCKINFail.getNumber());
        }
    }

    @ITIApi
    @ApiOperation(value = "删除文件对象")
    @DeleteMapping(value = "/getFileInfo")
    @ApiImplicitParams({
            @ApiImplicitParam(dataType = "String", name = "objectName" ,value = "对象名称" ,required = true),
            @ApiImplicitParam(dataType = "String", name = "bucketName" ,value = "对象存储桶名称" ,required = true)
    })
    public ApiResult<?> delFileInfo(String objectName,String bucketName) {
        try {
            uploadFileService.delFileInfo(objectName,bucketName);
            return ApiResult.ok(CommodityEnum.DELSTOCKINSUCCESS.getResult(),CommodityEnum.DELSTOCKINSUCCESS.getNumber());
        }catch (Exception e){
            e.printStackTrace();
            return ApiResult.ok(CommodityEnum.DELSTOCKINFail.getResult(),CommodityEnum.DELSTOCKINFail.getNumber());
        }
    }


    @ITIApi
    @ApiOperation(value = "指定路径上传文件对象")
    @PostMapping("/uploadSpecifyPath")
    Object uploadSpecifyPath(@RequestParam("file") MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
        String path = "D:/home/tmpUpload/";
        File targetFile = new File(path);
        if (!targetFile.exists()) {
            targetFile.mkdirs();
        }
        FileOutputStream out = new FileOutputStream(path + fileName);
//        String filePath = path + fileName;
        out.write(file.getBytes());
        out.flush();
        out.close();
        return CommodityEnum.ADDSTOCKINSUCCESS.getResult();
    }

}

package com.gxzc.dsppm.web.service.impl;

import cn.hutool.core.util.IdUtil;
import com.gxzc.dsppm.web.service.UploadFileService;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 
 * @date Create in 18:36 2020/5/7 0007
 * @description
 */
@Service
public class UploadFileServiceImpl implements UploadFileService {
    /*minio配置*/
    @Value("${minio.endpoint}") private String endpoint;
    @Value("${minio.accessKey}") private String accessKey;
    @Value("${minio.secretKey}") private String secretKey;

    @Override
    public String uploadFile(MultipartFile file, String bucketName) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
            String fileName = file.getOriginalFilename();
            String objectName = IdUtil.simpleUUID()+fileName.substring(fileName.lastIndexOf("."),fileName.length());
            minioClient.putObject(bucketName,objectName,file.getInputStream(),file.getInputStream().available(),file.getContentType());
            return objectName;
        }catch (Exception e){
            throw e;
        }
    }


    @Override
    public String getFileInfo(String objectName, String bucketName) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
            return minioClient.presignedGetObject(bucketName,objectName,6);
        }catch (Exception e){
            throw e;
        }
    }

    @Override
    public void delFileInfo(String objectName, String bucketName) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
            minioClient.removeObject(bucketName,objectName);
        }catch (Exception e){
            throw e;
        }
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当将MinIO与Spring Boot集成时,您可以使用MinIO Java客户端库来与MinIO对象存储系统进行交互。以下是一些步骤可以帮助您开始整合: 1. 首先,您需要在Spring Boot项目的依赖项中添加MinIO Java客户端库。在您的`pom.xml`文件中添加以下依赖项: ```xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.0.6</version> </dependency> ``` 2. 创建一个配置类来配置MinIO连接和操作。在您的Spring Boot项目中创建一个名为`MinioConfig`的类,并添加以下代码: ```java @Configuration public class MinioConfig { @Value("${minio.accessKey}") private String accessKey; @Value("${minio.secretKey}") private String secretKey; @Value("${minio.endpoint}") private String endpoint; @Bean public MinioClient minioClient() { return MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } } ``` 在上面的代码中,我们使用`@Value`注解从配置文件中获取MinIO的访问密钥、秘钥和端点信息,并创建一个`MinioClient` bean。 3. 在需要使用MinIO的地方注入`MinioClient`并进行操作。例如,如果您想上传文件到MinIO,可以创建一个服务类并注入`MinioClient`,然后编写上传文件的方法: ```java @Service public class MinioService { private final MinioClient minioClient; public MinioService(MinioClient minioClient) { this.minioClient = minioClient; } public void uploadFile(String bucketName, String objectName, String filePath) { try { minioClient.uploadObject(UploadObjectArgs.builder() .bucket(bucketName) .object(objectName) .filename(filePath) .build()); System.out.println("File uploaded successfully"); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们通过注入的`MinioClient`对象调用`uploadObject`方法来上传文件。 这只是一个简单的示例,您可以根据您的需求进一步扩展和使用MinIO的其他功能。 请确保在`application.properties`或`application.yml`配置文件中提供正确的MinIO连接信息,例如: ``` minio.accessKey=your_access_key minio.secretKey=your_secret_key minio.endpoint=http://localhost:9000 ``` 这是一个基本的MinIO与Spring Boot集成示例。您可以根据您的具体需求和业务逻辑进行进一步的开发和调整。希望对您有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值