manailin
2021-08-19 2e594616763f971016a226ef7bf34f980c188680
[新增]新增minio工具类和测试代码
2个文件已添加
3个文件已修改
230 ■■■■■ 已修改文件
springcloud_k8s_panzhihuazhihuishequ/community_backstage/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/CommunityConvenientApi.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/config/MinioConfig.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/config/MinioUtil.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/pom.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/community_backstage/pom.xml
@@ -62,6 +62,11 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--minio文件存储-->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
        </dependency>
    </dependencies>
    <build>
springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/CommunityConvenientApi.java
@@ -1,23 +1,21 @@
package com.panzhihua.community_backstage.api;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSONArray;
import com.jcraft.jsch.SftpException;
import com.panzhihua.common.constants.FtpConstants;
import com.panzhihua.common.controller.BaseController;
import com.panzhihua.common.model.dtos.community.*;
import com.panzhihua.common.model.dtos.user.EexcelUserDTO;
import com.panzhihua.common.listen.ComCvtServeExcelListen;
import com.panzhihua.common.model.dtos.community.ComCvtBusinessDTO;
import com.panzhihua.common.model.dtos.community.ComCvtServeDTO;
import com.panzhihua.common.model.dtos.community.PageComCvtBusinessDTO;
import com.panzhihua.common.model.dtos.community.PageComCvtServeDTO;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.*;
import com.panzhihua.common.service.community.CommunityService;
import com.panzhihua.common.listen.ComCvtServeExcelListen;
import com.panzhihua.common.utlis.SFTPUtil;
import com.panzhihua.common.validated.AddGroup;
import com.panzhihua.community_backstage.excel.CustomSheetWriteHandler;
import com.panzhihua.community_backstage.config.MinioUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -30,11 +28,8 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;
/**
@@ -52,7 +47,7 @@
    private CommunityService communityService;
    @Value("${excel.convenientUrl}")
    private String excelConvenientUrl="http://panzhihua.nhys.cdnhxx.com/web/bianminfuwudaoru.xlsx";
    private String excelConvenientUrl = "http://panzhihua.nhys.cdnhxx.com/web/bianminfuwudaoru.xlsx";
    @Value("${excel.userurl}")
    private String excelUrl;
@@ -72,7 +67,10 @@
    @Value("${ftp.url}")
    private String url;
    @ApiOperation(value = "分页查询便民服务商家",response = ComCvtBusinessVO.class)
    @Resource
    private MinioUtil minioUtil;
    @ApiOperation(value = "分页查询便民服务商家", response = ComCvtBusinessVO.class)
    @PostMapping("/business/page")
    public R pageComCvtBusiness(@RequestBody PageComCvtBusinessDTO pageComCvtBusinessDTO) {
        Long communityId = this.getCommunityId();
@@ -91,9 +89,9 @@
        return communityService.addComCvtBusiness(comCvtBusinessDTO);
    }
    @ApiOperation(value = "社区下拉列表" ,response = ComActVO.class)
    @ApiOperation(value = "社区下拉列表", response = ComActVO.class)
    @GetMapping("/community")
    public R listCommunity(){
    public R listCommunity() {
        return communityService.listCommunityAll();
    }
@@ -116,13 +114,13 @@
        return communityService.deleteComCvtBusiness(id);
    }
    @ApiOperation(value = "分页查询便民服务",response = ComCvtServeVO.class)
    @ApiOperation(value = "分页查询便民服务", response = ComCvtServeVO.class)
    @PostMapping("/serve/page")
    public R pageComCvtServe(@RequestBody PageComCvtServeDTO pageComCvtServeDTO) {
        return communityService.pageComCvtServe(pageComCvtServeDTO);
    }
    @ApiOperation(value = "查询便民服务所有分类,下拉框",response = ComCvtCategoryVO.class)
    @ApiOperation(value = "查询便民服务所有分类,下拉框", response = ComCvtCategoryVO.class)
    @PostMapping("/category/all")
    public R allComCvtCategory() {
        return communityService.allComCvtCategory();
@@ -143,7 +141,7 @@
        return communityService.putComCvtServe(comCvtServeDTO);
    }
    @ApiOperation(value = "查询便民服务详情",response = ComCvtServeVO.class)
    @ApiOperation(value = "查询便民服务详情", response = ComCvtServeVO.class)
    @GetMapping("/serve/get")
    public R getComCvtServe(@RequestParam("id") Long id) {
        return communityService.getComCvtServe(id);
@@ -165,9 +163,9 @@
    @PostMapping(value = "/upload/file", consumes = "multipart/*", headers = "content-type=multipart/form-date")
    public R uploadImage(@RequestParam MultipartFile file, HttpServletRequest request) {
        String extension = FilenameUtils.getExtension(file.getOriginalFilename());
        String name= UUID.randomUUID().toString().replaceAll("-","")+"."+extension;
        String name = UUID.randomUUID().toString().replaceAll("-", "") + "." + extension;
        try {
            SFTPUtil sftp = new SFTPUtil(userName,password,host,port);
            SFTPUtil sftp = new SFTPUtil(userName, password, host, port);
            sftp.login();
            InputStream is = file.getInputStream();
            sftp.uploadMore(FtpConstants.FTPFILEPATH_IDCARD, name, is);
@@ -179,15 +177,29 @@
        }
    }
    @ApiOperation(value = "minio上传文件测试")
    @PostMapping(value = "/minio/upload/file", consumes = "multipart/*", headers = "content-type=multipart/form-date")
    public R minipuploadImage(@RequestParam MultipartFile file, HttpServletRequest request) {
        try {
            String extension = FilenameUtils.getExtension(file.getOriginalFilename());
            String name = UUID.randomUUID().toString().replaceAll("-", "") + "." + extension;
            String imageUrl = minioUtil.upload(file, name);
            return R.ok(imageUrl);
        } catch (Exception e) {
            log.error("上传照片失败【{}】", e.getMessage());
            return R.fail();
        }
    }
    @ApiOperation(value = "excel导入便民服务")
    @PostMapping(value = "/serve/import", consumes = "multipart/*", headers = "content-type=multipart/form-date")
    public R downloadTemplate(@RequestParam MultipartFile file, HttpServletRequest request) {
        String fileName = file.getOriginalFilename();  //获取文件名
        log.info("传入文件名字【{}】",fileName);
        log.info("传入文件名字【{}】", fileName);
        InputStream inputStream = null;
        try {
            inputStream = file.getInputStream();
            EasyExcel.read(inputStream, ComCvtServeExcelVO.class, new ComCvtServeExcelListen(communityService,this.getCommunityId())).sheet().doRead();
            EasyExcel.read(inputStream, ComCvtServeExcelVO.class, new ComCvtServeExcelListen(communityService, this.getCommunityId())).sheet().doRead();
        } catch (IOException e) {
            e.printStackTrace();
            log.error("导入模板失败【{}】", e.getMessage());
springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/config/MinioConfig.java
New file
@@ -0,0 +1,30 @@
package com.panzhihua.community_backstage.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
 * program 攀枝花智慧社区项目
 * description minio存储信息配置
 *
 * @author manailin
 * Date 2021-08-19 15:30
 **/
@Data
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {
    private String host;
    private String accessKey;
    private String secretKey;
    private String url;
    private String bucket;
    private String aliasName;
    private String aliasPCName;
}
springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/config/MinioUtil.java
New file
@@ -0,0 +1,131 @@
package com.panzhihua.community_backstage.config;
import io.minio.MinioClient;
import io.minio.ObjectStat;
import org.apache.commons.io.IOUtils;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.UUID;
/**
 * program 攀枝花智慧社区项目
 * description minio工具类
 *
 * @author manailin
 * Date 2021-08-19 15:30
 **/
@Component
@EnableConfigurationProperties(MinioConfig.class)
public class MinioUtil {
    @Resource
    private MinioConfig minioProperties;
    /**
     * 文件上传
     *
     * @param file 要上传的文件
     * @return
     */
    public String upload(MultipartFile file, String name) {
        if (null != file) {
            try {
                UUID uuid = UUID.randomUUID();
                StringBuilder s = new StringBuilder();
                s.append(uuid.toString().replace("-", "")).append("/");
                MinioClient minioClient = new MinioClient(minioProperties.getHost(),
                        minioProperties.getAccessKey(),
                        minioProperties.getSecretKey());
                // bucket 不存在,创建
                if (!minioClient.bucketExists(minioProperties.getBucket())) {
                    minioClient.makeBucket(minioProperties.getBucket());
                }
                //得到文件流
                InputStream input = file.getInputStream();
                //文件名
                //String fileName = uuid + "/images." + FilenameUtils.getExtension(file.getOriginalFilename());
                String fileName = s.append(name).toString();
                String contentType = file.getContentType();
                minioClient.putObject(minioProperties.getBucket(), fileName, input, contentType);
                StringBuilder fileUrl = new StringBuilder(minioProperties.getUrl());
                String url = fileUrl.append(fileName).toString();
                return url;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    /**
     * 文件下载
     *
     * @param response
     * @param url
     */
    public void download(HttpServletResponse response, String url) {
        // 从链接中得到文件名
        String replace = url.replace(minioProperties.getBucket() + "/", "#");
        String fileName = replace.split("#")[1];
        InputStream inputStream;
        try {
            MinioClient minioClient = new MinioClient(minioProperties.getHost(),
                    minioProperties.getAccessKey(),
                    minioProperties.getSecretKey());
            ObjectStat stat = minioClient.statObject(minioProperties.getBucket(), fileName);
            inputStream = minioClient.getObject(minioProperties.getBucket(), fileName);
            response.setContentType(stat.contentType());
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            IOUtils.copy(inputStream, response.getOutputStream());
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 文件下载
     *
     * @param response
     * @param url
     */
    public byte[] getBytes(HttpServletResponse response, String url) {
        // 从链接中得到文件名
        String replace = url.replace(minioProperties.getBucket() + "/", "#");
        String fileName = replace.split("#")[1];
        InputStream inputStream;
        byte[] bytes = new byte[0];
        try {
            MinioClient minioClient = new MinioClient(minioProperties.getHost(),
                    minioProperties.getAccessKey(),
                    minioProperties.getSecretKey());
            inputStream = minioClient.getObject(minioProperties.getBucket(), fileName);
            bytes = toByteArray(inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bytes;
    }
    public static byte[] toByteArray(InputStream input) throws IOException {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        byte[] buffer = new byte[4096];
        int n = 0;
        while (-1 != (n = input.read(buffer))) {
            output.write(buffer, 0, n);
        }
        return output.toByteArray();
    }
}
springcloud_k8s_panzhihuazhihuishequ/pom.xml
@@ -42,6 +42,7 @@
        <spring-cloud-starter-netflix-hystrix.version>2.2.6.RELEASE</spring-cloud-starter-netflix-hystrix.version>
        <spring-boot-starter-data-redis.version>2.4.0</spring-boot-starter-data-redis.version>
        <springfox-boot-starter.version>3.0.0</springfox-boot-starter.version>
        <minio.version>6.0.8</minio.version>
    </properties>
    <!-- 依赖声明 -->
@@ -196,7 +197,12 @@
                <artifactId>spring-boot-starter-actuator</artifactId>
                <version>2.3.4.RELEASE</version>
            </dependency>
           <!--minio文件存储-->
            <dependency>
                <groupId>io.minio</groupId>
                <artifactId>minio</artifactId>
                <version>8.0.3</version>
            </dependency>
        </dependencies>
    </dependencyManagement>