Java实现minio文件服务web在线解压上传工具类

Posted 洛阳泰山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现minio文件服务web在线解压上传工具类相关的知识,希望对你有一定的参考价值。

 

前言

   文章中的web解压工具类结合了minio文件服务,上传解压文件过程中,先解压成文件流,再将解压的文件又上传到minio文件服务器上。(不同本地文件服务,可以直接用文件copy的方式,cpoy到服务器指定静态文件服务的文件路径下)

pom文件依赖

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <version>1.18</version>
        </dependency>

        <!--minio-->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>3.0.10</version>
        </dependency>

 

调用 WebCompressUtil工具在线解压代码示例

      MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
            // 检查存储桶是否已经存在
            boolean isExist = minioClient.bucketExists(bucketName);
            if (!isExist) {
                minioClient.makeBucket(bucketName);
            }
            // 拼接文件名
            String parentDir = genParentDir();
            String objectName = parentDir + file.getOriginalFilename();
            try {
                // 使用putObject上传一个文件到存储桶中。
                minioClient.putObject(bucketName, objectName, file.getInputStream(), file.getSize(), null, null, file.getContentType());
            } catch (Exception e) {
                e.printStackTrace();
            }
            String finalFileName=null;
            List<String> list = WebCompressUtil.unCompress(file, minioClient, bucketName, parentDir);

WebCompressUtil 工具类代码 


import io.minio.MinioClient;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * web 压缩解压工具
 */
public class WebCompressUtil {

    private static final int BUFFER_SIZE = 2048;


    public  static List<String> unTar(InputStream in,MinioClient minioClient,String bucketName,String parentDir) {
        List<String> fileNames = new ArrayList<String>();
        try {
            TarArchiveInputStream tarIn = new TarArchiveInputStream(in, BUFFER_SIZE);
            while (tarIn.getNextTarEntry() != null) {
                TarArchiveEntry entry = tarIn.getNextTarEntry();
                if (entry.isFile()) {
                    minioClient.putObject(bucketName, parentDir+entry.getName(), tarIn, entry.getSize(), null, null, null);
                    fileNames.add(parentDir+entry.getName());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return fileNames;
    }


    public static List<String> unZip(InputStream in,MinioClient minioClient,String bucketName,String parentDir) {
        List<String> fileNames = new ArrayList<String>();
        try {
            // 创建客户端
            ZipArchiveInputStream is = new ZipArchiveInputStream(new BufferedInputStream(in, BUFFER_SIZE));
            ZipArchiveEntry entry = null;
            while ((entry = is.getNextZipEntry()) != null) {
                if (!entry.isDirectory()) {
                    try {
                        // 使用putObject上传一个文件到存储桶中。
                        minioClient.putObject(bucketName,parentDir+entry.getName() , is, entry.getSize(), null, null, null);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    fileNames.add(parentDir+entry.getName());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return fileNames;
    }





    /**
     * 解压方法
     *
     * @param file 解压文件
     * @return
     * @throws Exception
     */
    public static List<String> unCompress(MultipartFile file,MinioClient minioClient,String bucketName,String parentDir){
        List<String> ret = new ArrayList<String>();
        try {
            String fileName=file.getOriginalFilename();
            String upperName = fileName.toUpperCase();
            if (upperName.endsWith(".ZIP")) {
                ret = unZip(file.getInputStream(),minioClient,bucketName, parentDir);
            } else if (upperName.endsWith(".TAR")) {
                ret = unTar(file.getInputStream(),minioClient,bucketName, parentDir);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ret;
    }







}

 

以上是关于Java实现minio文件服务web在线解压上传工具类的主要内容,如果未能解决你的问题,请参考以下文章

Java操作MinIO实现文件的上传和删除。

Java编程系列Minio实现文件上传下载

Java编程系列Minio实现文件上传下载

Java编程系列Minio实现文件上传下载

搭建文件服务器 MinIO和Java中上传文件至MinIO服务器

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