使用java实现文件(字节输入流)解压缩 支持zip,7z格式 并且上传oss

1首先引入依赖

 <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <version>1.21</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-core</artifactId>
            <version>1.24.1</version>
        </dependency>
        <dependency>
            <groupId>org.tukaani</groupId>
            <artifactId>xz</artifactId>
            <version>1.9</version>
        </dependency>

2直接上工具类,解压缩支持按照文件类型进行解压缩,支持原先未压缩文件。

package com.utils;


import com.alibaba.schedulerx.shade.org.apache.commons.lang.time.DateFormatUtils;
import com.cpit.ycyt.vch.enums.FileTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
import org.apache.commons.compress.archivers.sevenz.SevenZOutputFile;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.tika.Tika;
import org.springframework.stereotype.Component;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;


/**
 * 解压缩工具(暂时支持zip,7z。后续待扩充)
 *
 * @author 
 * @email
 * @date 2024/1/26 9:05
 */
@Component
@Slf4j
public class CompressUtil {
    
    // 临时文件存放地址(可以替换成服务器上一个固定存在的地址)
    private String tmpfilepath="/home/admin/";

    /**
     * zip压缩
     *
     * @param inputStream 要压缩的文件流
     * @param objectName  压缩后的文件存放目录
     */
    public Map compressZip(InputStream inputStream, String objectName) throws IOException {
        InputStream in = null;
        String lastPart = getLastPart(objectName);
        File file = new File(tmpfilepath +lastPart);
        String fileName = file.getName();
        FileUtils.copyInputStreamToFile(inputStream, file);
        File tempZipFile = null;
        Map map = new HashMap();
        try {
            // 创建临时ZIP文件
            tempZipFile = createTempZipFile(fileName + "T.zip", file);
            in = new FileInputStream(tempZipFile);
            map.put("objectName", objectName + ".zip");
            map.put("in", in);
            map.put("output", tempZipFile);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 后定义先释放
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                file.delete();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return map;
    }


    /**
     * 7z文件压缩
     *
     * @param inputStream 要压缩的文件流
     * @param objectName  压缩后的文件存放目录
     */

    public Map compress7z(InputStream inputStream, String objectName) throws Exception {
        // 设置本地源文件路径、目标文件名
        String lastPart = getLastPart(objectName);
        String substring = StringUtils.substring(lastPart, 0, lastPart.lastIndexOf('.'));
        String fileType = StringUtils.substring(lastPart, lastPart.lastIndexOf('.'));
        String outputFile = substring;
        String inFile = substring + "IN" + fileType;
        File input = new File(tmpfilepath + inFile);
        Map map = new HashMap();
        if (!input.exists()) {
            try {
                //创建文件
                input.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        FileUtils.copyInputStreamToFile(inputStream, input);
        SevenZOutputFile out = null;
        InputStream in = null;
        File output = null;
        try {
            output = new File(tmpfilepath+outputFile);
            if (!output.exists()) {
                try {
                    //创建文件
                    output.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            out = new SevenZOutputFile(output);
            compress(out, input, objectName);
            in = new FileInputStream(output);
            map.put("objectName", objectName + ".7z");
            map.put("in", in);
            map.put("output", output);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                input.delete();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return map;
    }

    /**
     * @param name 压缩文件名,可以写为null保持默认
     */
    //递归压缩
    public static void compress(SevenZOutputFile out, File input, String name) throws IOException {
        if (name == null) {
            name = input.getName();
        }
        SevenZArchiveEntry entry = null;
        //如果路径为目录(文件夹)
        if (input.isDirectory()) {
            //取出文件夹中的文件(或子文件夹)
            File[] flist = input.listFiles();

            if (flist.length == 0)//如果文件夹为空,则只需在目的地.7z文件中写入一个目录进入
            {
                entry = out.createArchiveEntry(input, name + "/");
                out.putArchiveEntry(entry);
            } else//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩
            {
                for (int i = 0; i < flist.length; i++) {
                    compress(out, flist[i], name + "/" + flist[i].getName());
                }
            }
        } else//如果不是目录(文件夹),即为文件,则先写入目录进入点,之后将文件写入7z文件中
        {
            FileInputStream fos = new FileInputStream(input);
            BufferedInputStream bis = new BufferedInputStream(fos);
            entry = out.createArchiveEntry(input, name);
            out.putArchiveEntry(entry);
            int len = -1;
            //将源文件写入到7z文件中
            byte[] buf = new byte[1024];
            while ((len = bis.read(buf)) != -1) {
                out.write(buf, 0, len);
            }
            bis.close();
            fos.close();
            out.closeArchiveEntry();
        }
    }


    private static File createTempZipFile(String zipFileName, File inputFile) throws IOException {
        File outputDir = new File("/tmp");
        if (!outputDir.exists()) {
            outputDir.mkdirs();
        }

        File tempZipFile = new File(outputDir, zipFileName);

        try (FileOutputStream fos = new FileOutputStream(tempZipFile);
             BufferedOutputStream bos = new BufferedOutputStream(fos);
             ZipOutputStream zos = new ZipOutputStream(bos)) {
            addFilesToZip(inputFile, "", zos);
        } catch (IOException e) {
            throw new RuntimeException("Failed to create temporary ZIP file.", e);
        }

        return tempZipFile;
    }

    private static void addFilesToZip(File file, String parentPath, ZipOutputStream zos) throws IOException {
        byte[] buffer = new byte[1024];
        int bytesRead;

        if (file.isDirectory()) {
            for (File child : file.listFiles()) {
                addFilesToZip(child, parentPath + "/" + file.getName(), zos);
            }
        } else {
            InputStream is = new FileInputStream(file);
            zos.putNextEntry(new ZipEntry(parentPath));

            while ((bytesRead = is.read(buffer)) > -1) {
                zos.write(buffer, 0, bytesRead);
            }
            IOUtils.closeQuietly(is);
            zos.closeEntry();
        }
    }

    /**
     * 暂时解压缩只支持zip,7z其他格式后续扩充
     *
     * @param inputStream 待解压缩的输入流
     */
    public Map deCompress(InputStream inputStream) throws IOException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = inputStream.read(buffer)) > -1) {
            outputStream.write(buffer, 0, len);
        }
        outputStream.flush();
        InputStream in1 = new ByteArrayInputStream(outputStream.toByteArray());
        InputStream in2 = new ByteArrayInputStream(outputStream.toByteArray());
        String fileTypeByFileName = getFileTypeByFileName(in1);
        Map map = new HashMap();
        try {
            if (Objects.equals(fileTypeByFileName, "7z")) {
               //7z解压缩
                map = un7z(in2);
            } else if (Objects.equals(fileTypeByFileName, "zip")) {
            // zip解压缩
                map = unzip(in2);
            } else {
            //不处理文件字节流为未压缩流
                map.put("inputstream", in2);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                in1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return map;

    }

    /**
     * 解压zip文件
     *
     * @param inputStream
     */
    public Map unzip(InputStream inputStream) throws IOException {
        Map map = new HashMap();
        ZipInputStream zipIn = null;
        File destDir = null;
        try {
            String code = DateFormatUtils.format(new Date(), "yyyyMMddHHmmss");
            Random re = new Random();
            //生成一个随机四位数
            String random = String.valueOf(re.nextInt(9999 - 1000 + 1) + 1000);
            String targeFile = code + random;
            String destFolder = "path/" + targeFile + "." + "zip";
            destDir = new File(destFolder);
            if (!destDir.exists()) {
                //先得到文件的上级目录,并创建上级目录,在创建文件
                destDir.getParentFile().mkdir();
                try {
                    //创建文件
                    destDir.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            zipIn = new ZipInputStream(inputStream);
            ZipEntry entry = zipIn.getNextEntry();
            while (entry != null) {
                String filePath = destFolder + File.separator + entry.getName();
                if (!entry.isDirectory()) {
                    extractFile(zipIn, filePath);
                } else {
                    File dir = new File(filePath);
                    dir.mkdirs();
                }
                zipIn.closeEntry();
                entry = zipIn.getNextEntry();
            }
            inputStream = new FileInputStream(destDir);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 后定义先释放
            try {
                zipIn.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        map.put("inputstream", inputStream);
        map.put("targetFile", destDir);
        return map;

    }

    private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
        byte[] bytesIn = new byte[4096];
        int read;
        while ((read = zipIn.read(bytesIn)) != -1) {
            bos.write(bytesIn, 0, read);
        }
        bos.close();
    }


    /**
     * 解压7z文件
     *
     * @param inputStream
     */
    public Map un7z(InputStream inputStream) throws IOException {
        SevenZFile sevenZFile = null;
        File newFile = null;
        OutputStream out = null;
        BufferedOutputStream bos = null;
        InputStream inpust = null;
        // 设置临时源文件,目标文件
        String code = DateFormatUtils.format(new Date(), "yyyyMMddHHmmss");
        Random re = new Random();
        //生成一个随机四位数
        String random = String.valueOf(re.nextInt(9999 - 1000 + 1) + 1000);
        final String fileName = code + random;
        String destFolder = fileName;
        File input = new File(fileName + "T");
        if (!input.exists()) {
            try {
                //创建文件
                input.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        newFile = new File(destFolder);
        if (!newFile.exists()) {
            try {
                //创建文件
                newFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        FileUtils.copyInputStreamToFile(inputStream, input);
        sevenZFile = new SevenZFile(input);
        try {
            ArchiveEntry entry;
            while ((entry = sevenZFile.getNextEntry()) != null) {
                if (!entry.isDirectory()) {
                    out = new FileOutputStream(newFile);
                    bos = new BufferedOutputStream(out);
                    int len = -1;
                    byte[] buf = new byte[(int) entry.getSize()];
                    while ((len = sevenZFile.read(buf)) != -1) {
                        bos.write(buf, 0, len);
                    }
                    bos.flush();
                    inpust = new FileInputStream(newFile);

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                sevenZFile.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                input.delete();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        Map map = new HashMap();
        map.put("inputstream", inpust);
        map.put("targetFile", newFile);
        return map;

    }


    public String getLastPart(String path) {
        int lastIndex = path.lastIndexOf("/");
        if (lastIndex == -1) {
            lastIndex = path.lastIndexOf("\\");
        }
        return path.substring(lastIndex + 1);

    }

    /**
     * 获取文件类型
     *
     * @param inputStream
     */
    public String getFileTypeByFileName(InputStream inputStream) {
        String code = DateFormatUtils.format(new Date(), "yyyyMMddHHmmss");
        Random re = new Random();
        //生成一个随机四位数
        String random = String.valueOf(re.nextInt(9999 - 1000 + 1) + 1000);
        final String fileName = code + random;
        Tika defaultTika = new Tika();
        String fileType = null;
        final File file = new File(fileName);
        try {
            FileUtils.copyInputStreamToFile(inputStream, file);
            String contentType = defaultTika.detect(file);
            fileType = FileTypeEnum.getFileType(contentType);
            return fileType;
        } catch (Exception e) {
            log.error("getFileTypeByFileName exception:", e);
        } finally {
            try {
                file.delete();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return fileType;
        }

    }

}

文件枚举类

package com.enums;

/**
 * 文件类型
 *
 * @author 
 * @email
 * @date 2024/1/22 15:27
 */
public enum FileTypeEnum {
    FILE_TYPE_JSON("json", "application/json"),
    FILE_TYPE_ZIP("zip", "application/zip"),
    FILE_TYPE_TEXT("text", "text/plain"),
    FILE_TYPE_7Z("7z", "application/x-7z-compressed"),
    FILE_TYPE_XLS("xls", "application/vnd.ms-excel"),
    FILE_TYPE_XLSX("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),
    FILE_TYPE_JPG("jpg", "image/jpeg"),
    FILE_TYPE_123("123", "pplication/vnd.lotus-1-2-3"),
    FILE_TYPE_3ds("3ds", "mage/x-3ds"),
    FILE_TYPE_3g2("3g2", "ideo/3gpp"),
    FILE_TYPE_3ga("3ga", "ideo/3gpp"),
    FILE_TYPE_3gp("3gp", "ideo/3gpp"),
    FILE_TYPE_3gpp("3gpp", "ideo/3gpp"),
    FILE_TYPE_602("602", "pplication/x-t602"),
    FILE_TYPE_669("669", "udio/x-mod"),
    FILE_TYPE_7z("7z", "pplication/x-7z-compressed"),
    FILE_TYPE_a("a", "pplication/x-archive"),
    FILE_TYPE_aac("aac", "udio/mp4"),
    FILE_TYPE_abw("abw", "pplication/x-abiword"),
    FILE_TYPE_abwcras("abw.crashed", "pplication/x-abiword"),
    FILE_TYPE_abwgz("abw.gz", "pplication/x-abiword"),
    FILE_TYPE_ac3("ac3", "udio/ac3"),
    FILE_TYPE_ace("ace", "pplication/x-ace"),
    FILE_TYPE_adb("adb", "ext/x-adasrc"),
    FILE_TYPE_ads("ads", "ext/x-adasrc"),
    FILE_TYPE_afm("afm", "pplication/x-font-afm"),
    FILE_TYPE_ag("ag", "mage/x-applix-graphics"),
    FILE_TYPE_ai("ai", "pplication/illustrator"),
    FILE_TYPE_aif("aif", "udio/x-aiff"),
    FILE_TYPE_aifc("aifc", "udio/x-aiff"),
    FILE_TYPE_aiff("aiff", "udio/x-aiff"),
    FILE_TYPE_al("al", "pplication/x-perl"),
    FILE_TYPE_alz("alz", "pplication/x-alz"),
    FILE_TYPE_amr("amr", "udio/amr"),
    FILE_TYPE_ani("ani", "pplication/x-navi-animation"),
    FILE_TYPE_anim19("anim[1-9j]", "ideo/x-anim"),
    FILE_TYPE_anx("anx", "pplication/annodex"),
    FILE_TYPE_ape("ape", "udio/x-ape"),
    FILE_TYPE_arj("arj", "pplication/x-arj"),
    FILE_TYPE_arw("arw", "mage/x-sony-arw"),
    FILE_TYPE_as("as", "pplication/x-applix-spreadsheet"),
    FILE_TYPE_asc("asc", "ext/plain"),
    FILE_TYPE_asf("asf", "ideo/x-ms-asf"),
    FILE_TYPE_asp("asp", "pplication/x-asp"),
    FILE_TYPE_ass("ass", "ext/x-ssa"),
    FILE_TYPE_asx("asx", "udio/x-ms-asx"),
    FILE_TYPE_atom("atom", "pplication/atom+xml"),
    FILE_TYPE_au("au", "udio/basic"),
    FILE_TYPE_avi("avi", "ideo/x-msvideo"),
    FILE_TYPE_aw("aw", "pplication/x-applix-word"),
    FILE_TYPE_awb("awb", "udio/amr-wb"),
    FILE_TYPE_awk("awk", "pplication/x-awk"),
    FILE_TYPE_axa("axa", "udio/annodex"),
    FILE_TYPE_axv("axv", "ideo/annodex"),
    FILE_TYPE_bak("bak", "pplication/x-trash"),
    FILE_TYPE_bcpio("bcpio", "pplication/x-bcpio"),
    FILE_TYPE_bdf("bdf", "pplication/x-font-bdf"),
    FILE_TYPE_bib("bib", "ext/x-bibtex"),
    FILE_TYPE_bin("bin", "pplication/octet-stream"),
    FILE_TYPE_blend("blend", "pplication/x-blender"),
    FILE_TYPE_blender("blender", "pplication/x-blender"),
    FILE_TYPE_bmp("bmp", "mage/bmp"),
    FILE_TYPE_bz("bz", "pplication/x-bzip"),
    FILE_TYPE_bz2("bz2", "pplication/x-bzip"),
    FILE_TYPE_c("c", "ext/x-csrc"),
    FILE_TYPE_c2("c++", "ext/x-c++src"),
    FILE_TYPE_cab("cab", "pplication/vnd.ms-cab-compressed"),
    FILE_TYPE_cb7("cb7", "pplication/x-cb7"),
    FILE_TYPE_cbr("cbr", "pplication/x-cbr"),
    FILE_TYPE_cbt("cbt", "pplication/x-cbt"),
    FILE_TYPE_cbz("cbz", "pplication/x-cbz"),
    FILE_TYPE_cc("cc", "ext/x-c++src"),
    FILE_TYPE_cdf("cdf", "pplication/x-netcdf"),
    FILE_TYPE_cdr("cdr", "pplication/vnd.corel-draw"),
    FILE_TYPE_cer("cer", "pplication/x-x509-ca-cert"),
    FILE_TYPE_cert("cert", "pplication/x-x509-ca-cert"),
    FILE_TYPE_cgm("cgm", "mage/cgm"),
    FILE_TYPE_chm("chm", "pplication/x-chm"),
    FILE_TYPE_chrt("chrt", "pplication/x-kchart"),
    FILE_TYPE_class("class", "pplication/x-java"),
    FILE_TYPE_cls("cls", "ext/x-tex"),
    FILE_TYPE_cmake("cmake", "ext/x-cmake"),
    FILE_TYPE_cpio("cpio", "pplication/x-cpio"),
    FILE_TYPE_cpiogz("cpio.gz", "pplication/x-cpio-compressed"),
    FILE_TYPE_cpp("cpp", "ext/x-c++src"),
    FILE_TYPE_cr2("cr2", "mage/x-canon-cr2"),
    FILE_TYPE_crt("crt", "pplication/x-x509-ca-cert"),
    FILE_TYPE_crw("crw", "mage/x-canon-crw"),
    FILE_TYPE_cs("cs", "ext/x-csharp"),
    FILE_TYPE_csh("csh", "pplication/x-csh"),
    FILE_TYPE_css("css", "ext/css"),
    FILE_TYPE_cssl("cssl", "ext/css"),
    FILE_TYPE_csv("csv", "ext/csv"),
    FILE_TYPE_cue("cue", "pplication/x-cue"),
    FILE_TYPE_cur("cur", "mage/x-win-bitmap"),
    FILE_TYPE_cxx("cxx", "ext/x-c++src"),
    FILE_TYPE_d("d", "ext/x-dsrc"),
    FILE_TYPE_dar("dar", "pplication/x-dar"),
    FILE_TYPE_dbf("dbf", "pplication/x-dbf"),
    FILE_TYPE_dc("dc", "pplication/x-dc-rom"),
    FILE_TYPE_dcl("dcl", "ext/x-dcl"),
    FILE_TYPE_dcm("dcm", "pplication/dicom"),
    FILE_TYPE_dcr("dcr", "mage/x-kodak-dcr"),
    FILE_TYPE_dds("dds", "mage/x-dds"),
    FILE_TYPE_deb("deb", "pplication/x-deb"),
    FILE_TYPE_der("der", "pplication/x-x509-ca-cert"),
    FILE_TYPE_desktop("desktop", "pplication/x-desktop"),
    FILE_TYPE_dia("dia", "pplication/x-dia-diagram"),
    FILE_TYPE_diff("diff", "ext/x-patch"),
    FILE_TYPE_divx("divx", "ideo/x-msvideo"),
    FILE_TYPE_djv("djv", "mage/vnd.djvu"),
    FILE_TYPE_djvu("djvu", "mage/vnd.djvu"),
    FILE_TYPE_dng("dng", "mage/x-adobe-dng"),
    FILE_TYPE_doc("doc", "pplication/msword"),
    FILE_TYPE_docbook("docbook", "pplication/docbook+xml"),
    FILE_TYPE_docm("docm", "pplication/vnd.openxmlformats-officedocument.wordprocessingml.document"),
    FILE_TYPE_docx("docx", "pplication/vnd.openxmlformats-officedocument.wordprocessingml.document"),
    FILE_TYPE_dot("dot", "ext/vnd.graphviz"),
    FILE_TYPE_dsl("dsl", "ext/x-dsl"),
    FILE_TYPE_dtd("dtd", "pplication/xml-dtd"),
    FILE_TYPE_dtx("dtx", "ext/x-tex"),
    FILE_TYPE_dv("dv", "ideo/dv"),
    FILE_TYPE_dvi("dvi", "pplication/x-dvi"),
    FILE_TYPE_dvibz2("dvi.bz2", "pplication/x-bzdvi"),
    FILE_TYPE_dvigz("dvi.gz", "pplication/x-gzdvi"),
    FILE_TYPE_dwg("dwg", "mage/vnd.dwg"),
    FILE_TYPE_dxf("dxf", "mage/vnd.dxf"),
    FILE_TYPE_e("e", "ext/x-eiffel"),
    FILE_TYPE_egon("egon", "pplication/x-egon"),
    FILE_TYPE_eif("eif", "ext/x-eiffel"),
    FILE_TYPE_el("el", "ext/x-emacs-lisp"),
    FILE_TYPE_emf("emf", "mage/x-emf"),
    FILE_TYPE_emp("emp", "pplication/vnd.emusic-emusic_package"),
    FILE_TYPE_ent("ent", "pplication/xml-external-parsed-entity"),
    FILE_TYPE_eps("eps", "mage/x-eps"),
    FILE_TYPE_epsbz2("eps.bz2", "mage/x-bzeps"),
    FILE_TYPE_epsgz("eps.gz", "mage/x-gzeps"),
    FILE_TYPE_epsf("epsf", "mage/x-eps"),
    FILE_TYPE_epsfbz2("epsf.bz2", "mage/x-bzeps"),
    FILE_TYPE_epsfgz("epsf.gz", "mage/x-gzeps"),
    FILE_TYPE_epsi("epsi", "mage/x-eps"),
    FILE_TYPE_epsibz2("epsi.bz2", "mage/x-bzeps"),
    FILE_TYPE_epsigz("epsi.gz", "mage/x-gzeps"),
    FILE_TYPE_epub("epub", "pplication/epub+zip"),
    FILE_TYPE_erl("erl", "ext/x-erlang"),
    FILE_TYPE_es("es", "pplication/ecmascript"),
    FILE_TYPE_etheme("etheme", "pplication/x-e-them"),
    FILE_TYPE_etx("etx", "ext/x-setext"),
    FILE_TYPE_exe("exe", "pplication/x-ms-dos-ex"),
    FILE_TYPE_exr("exr", "mage/x-exr"),
    FILE_TYPE_ez("ez", "pplication/andrew-inset"),
    FILE_TYPE_f("f", "ext/x-fortran"),
    FILE_TYPE_f90("f90", "ext/x-fortran"),
    FILE_TYPE_f95("f95", "ext/x-fortran"),
    FILE_TYPE_fb2("fb2", "pplication/x-fictionbo"),
    FILE_TYPE_fig("fig", "mage/x-xfig"),
    FILE_TYPE_fits("fits", "mage/fits"),
    FILE_TYPE_fl("fl", "pplication/x-fluid"),
    FILE_TYPE_flac("flac", "udio/x-flac"),
    FILE_TYPE_flc("flc", "ideo/x-flic"),
    FILE_TYPE_fli("fli", "ideo/x-flic"),
    FILE_TYPE_flv("flv", "ideo/x-flv"),
    FILE_TYPE_flw("flw", "pplication/x-kivio"),
    FILE_TYPE_fo("fo", "ext/x-xslfo"),
    FILE_TYPE_for("for", "ext/x-fortran"),
    FILE_TYPE_g3("g3", "mage/fax-g3"),
    FILE_TYPE_gb("gb", "pplication/x-gameboy-rom"),
    FILE_TYPE_gba("gba", "pplication/x-gba-rom"),
    FILE_TYPE_gcrd("gcrd", "ext/directory"),
    FILE_TYPE_ged("ged", "pplication/x-gedcom"),
    FILE_TYPE_gedcom("gedcom", "pplication/x-gedcom"),
    FILE_TYPE_gen("gen", "pplication/x-genesis-rom"),
    FILE_TYPE_gf("gf", "pplication/x-tex-gf"),
    FILE_TYPE_gg("gg", "pplication/x-sms-rom"),
    FILE_TYPE_gif("gif", "mage/gif"),
    FILE_TYPE_glade("glade", "pplication/x-glade"),
    FILE_TYPE_gmo("gmo", "pplication/x-gettext-translation"),
    FILE_TYPE_gnc("gnc", "pplication/x-gnucash"),
    FILE_TYPE_gnd("gnd", "pplication/gnunet-directory"),
    FILE_TYPE_gnucash("gnucash", "pplication/x-gnucash"),
    FILE_TYPE_gnumeric("gnumeric", "pplication/x-gnumeric"),
    FILE_TYPE_gnuplot("gnuplot", "pplication/x-gnuplot"),
    FILE_TYPE_gp("gp", "pplication/x-gnuplot"),
    FILE_TYPE_gpg("gpg", "pplication/pgp-encrypted"),
    FILE_TYPE_gplt("gplt", "pplication/x-gnuplot"),
    FILE_TYPE_gra("gra", "pplication/x-graphite"),
    FILE_TYPE_gsf("gsf", "pplication/x-font-type1"),
    FILE_TYPE_gsm("gsm", "udio/x-gsm"),
    FILE_TYPE_gtar("gtar", "pplication/x-tar"),
    FILE_TYPE_gv("gv", "ext/vnd.graphviz"),
    FILE_TYPE_gvp("gvp", "ext/x-google-video-pointer"),
    FILE_TYPE_gz("gz", "pplication/x-gzip"),
    FILE_TYPE_h("h", "ext/x-chdr"),
    FILE_TYPE_h2("h++", "ext/x-c++hdr"),
    FILE_TYPE_hdf("hdf", "pplication/x-hdf"),
    FILE_TYPE_hh("hh", "ext/x-c++hdr"),
    FILE_TYPE_hp("hp", "ext/x-c++hdr"),
    FILE_TYPE_hpgl("hpgl", "pplication/vnd.hp-hpgl"),
    FILE_TYPE_hpp("hpp", "ext/x-c++hdr"),
    FILE_TYPE_hs("hs", "ext/x-haskell"),
    FILE_TYPE_htm("htm", "ext/html"),
    FILE_TYPE_html("html", "ext/html"),
    FILE_TYPE_hwp("hwp", "pplication/x-hwp"),
    FILE_TYPE_hwt("hwt", "pplication/x-hwt"),
    FILE_TYPE_hxx("hxx", "ext/x-c++hdr"),
    FILE_TYPE_ica("ica", "pplication/x-ica"),
    FILE_TYPE_icb("icb", "mage/x-tga"),
    FILE_TYPE_icns("icns", "mage/x-icns"),
    FILE_TYPE_ico("ico", "mage/vnd.microsoft.icon"),
    FILE_TYPE_ics("ics", "ext/calendar"),
    FILE_TYPE_idl("idl", "ext/x-idl"),
    FILE_TYPE_ief("ief", "mage/ief"),
    FILE_TYPE_iff("iff", "mage/x-iff"),
    FILE_TYPE_ilbm("ilbm", "mage/x-ilbm"),
    FILE_TYPE_ime("ime", "ext/x-imelody"),
    FILE_TYPE_imy("imy", "ext/x-imelody"),
    FILE_TYPE_ins("ins", "ext/x-tex"),
    FILE_TYPE_iptables("iptables", "ext/x-iptables"),
    FILE_TYPE_iso("iso", "pplication/x-cd-image"),
    FILE_TYPE_iso9660("iso9660", "pplication/x-cd-image"),
    FILE_TYPE_it("it", "udio/x-it"),
    FILE_TYPE_j2k("j2k", "mage/jp2"),
    FILE_TYPE_jad("jad", "ext/vnd.sun.j2me.app-descriptor"),
    FILE_TYPE_jar("jar", "pplication/x-java-archive"),
    FILE_TYPE_java("java", "ext/x-java"),
    FILE_TYPE_jng("jng", "mage/x-jng"),
    FILE_TYPE_jnlp("jnlp", "pplication/x-java-jnlp-file"),
    FILE_TYPE_jp2("jp2", "mage/jp2"),
    FILE_TYPE_jpc("jpc", "mage/jp2"),
    FILE_TYPE_jpe("jpe", "mage/jpeg"),
    FILE_TYPE_jpeg("jpeg", "mage/jpeg"),
    FILE_TYPE_jpf("jpf", "mage/jp2"),
    FILE_TYPE_jpr("jpr", "pplication/x-jbuilder-project"),
    FILE_TYPE_jpx("jpx", "mage/jp2"),
    FILE_TYPE_js("js", "pplication/javascript"),
    FILE_TYPE_json("json", "pplication/json"),
    FILE_TYPE_jsonp("jsonp", "pplication/jsonp"),
    FILE_TYPE_k25("k25", "mage/x-kodak-k25"),
    FILE_TYPE_kar("kar", "udio/midi"),
    FILE_TYPE_karbon("karbon", "pplication/x-karbon"),
    FILE_TYPE_kdc("kdc", "mage/x-kodak-kdc"),
    FILE_TYPE_kdelnk("kdelnk", "pplication/x-desktop"),
    FILE_TYPE_kexi("kexi", "pplication/x-kexiproject-sqlite3"),
    FILE_TYPE_kexic("kexic", "pplication/x-kexi-connectiondata"),
    FILE_TYPE_kexis("kexis", "pplication/x-kexiproject-shortcut"),
    FILE_TYPE_kfo("kfo", "pplication/x-kformula"),
    FILE_TYPE_kil("kil", "pplication/x-killustrator"),
    FILE_TYPE_kino("kino", "pplication/smil"),
    FILE_TYPE_kml("kml", "pplication/vnd.google-earth.kml+xml"),
    FILE_TYPE_kmz("kmz", "pplication/vnd.google-earth.kmz"),
    FILE_TYPE_kon("kon", "pplication/x-kontour"),
    FILE_TYPE_kpm("kpm", "pplication/x-kpovmodeler"),
    FILE_TYPE_kpr("kpr", "pplication/x-kpresenter"),
    FILE_TYPE_kpt("kpt", "pplication/x-kpresenter"),
    FILE_TYPE_kra("kra", "pplication/x-krita"),
    FILE_TYPE_ksp("ksp", "pplication/x-kspread"),
    FILE_TYPE_kud("kud", "pplication/x-kugar"),
    FILE_TYPE_kwd("kwd", "pplication/x-kword"),
    FILE_TYPE_kwt("kwt", "pplication/x-kword"),
    FILE_TYPE_la("la", "pplication/x-shared-library-la"),
    FILE_TYPE_latex("latex", "ext/x-tex"),
    FILE_TYPE_ldif("ldif", "ext/x-ldif"),
    FILE_TYPE_lha("lha", "pplication/x-lha"),
    FILE_TYPE_lhs("lhs", "ext/x-literate-haskell"),
    FILE_TYPE_lhz("lhz", "pplication/x-lhz"),
    FILE_TYPE_log("log", "ext/x-log"),
    FILE_TYPE_ltx("ltx", "ext/x-tex"),
    FILE_TYPE_lua("lua", "ext/x-lua"),
    FILE_TYPE_lwo("lwo", "mage/x-lwo"),
    FILE_TYPE_lwob("lwob", "mage/x-lwo"),
    FILE_TYPE_lws("lws", "mage/x-lws"),
    FILE_TYPE_ly("ly", "ext/x-lilypond"),
    FILE_TYPE_lyx("lyx", "pplication/x-lyx"),
    FILE_TYPE_lz("lz", "pplication/x-lzip"),
    FILE_TYPE_lzh("lzh", "pplication/x-lha"),
    FILE_TYPE_lzma("lzma", "pplication/x-lzma"),
    FILE_TYPE_lzo("lzo", "pplication/x-lzop"),
    FILE_TYPE_m("m", "ext/x-matlab"),
    FILE_TYPE_m15("m15", "udio/x-mod"),
    FILE_TYPE_m2t("m2t", "ideo/mpeg"),
    FILE_TYPE_m3u("m3u", "udio/x-mpegurl"),
    FILE_TYPE_m3u8("m3u8", "udio/x-mpegurl"),
    FILE_TYPE_m4("m4", "pplication/x-m4"),
    FILE_TYPE_m4a("m4a", "udio/mp4"),
    FILE_TYPE_m4b("m4b", "udio/x-m4b"),
    FILE_TYPE_m4v("m4v", "ideo/mp4"),
    FILE_TYPE_mab("mab", "pplication/x-markaby"),
    FILE_TYPE_man("man", "pplication/x-troff-man"),
    FILE_TYPE_mbox("mbox", "pplication/mbox"),
    FILE_TYPE_md("md", "pplication/x-genesis-rom"),
    FILE_TYPE_mdb("mdb", "pplication/vnd.ms-access"),
    FILE_TYPE_mdi("mdi", "mage/vnd.ms-modi"),
    FILE_TYPE_me("me", "ext/x-troff-me"),
    FILE_TYPE_med("med", "udio/x-mod"),
    FILE_TYPE_metalink("metalink", "pplication/metalink+xml"),
    FILE_TYPE_mgp("mgp", "pplication/x-magicpoint"),
    FILE_TYPE_mid("mid", "udio/midi"),
    FILE_TYPE_midi("midi", "udio/midi"),
    FILE_TYPE_mif("mif", "pplication/x-mif"),
    FILE_TYPE_minipsf("minipsf", "udio/x-minipsf"),
    FILE_TYPE_mka("mka", "udio/x-matroska"),
    FILE_TYPE_mkv("mkv", "ideo/x-matroska"),
    FILE_TYPE_ml("ml", "ext/x-ocaml"),
    FILE_TYPE_mli("mli", "ext/x-ocaml"),
    FILE_TYPE_mm("mm", "ext/x-troff-mm"),
    FILE_TYPE_mmf("mmf", "pplication/x-smaf"),
    FILE_TYPE_mml("mml", "ext/mathml"),
    FILE_TYPE_mng("mng", "ideo/x-mng"),
    FILE_TYPE_mo("mo", "pplication/x-gettext-translation"),
    FILE_TYPE_mo3("mo3", "udio/x-mo3"),
    FILE_TYPE_moc("moc", "ext/x-moc"),
    FILE_TYPE_mod("mod", "udio/x-mod"),
    FILE_TYPE_mof("mof", "ext/x-mof"),
    FILE_TYPE_moov("moov", "ideo/quicktime"),
    FILE_TYPE_mov("mov", "ideo/quicktime"),
    FILE_TYPE_movie("movie", "ideo/x-sgi-movie"),
    FILE_TYPE_mp11("mp+", "udio/x-musepack"),
    FILE_TYPE_mp2("mp2", "ideo/mpeg"),
    FILE_TYPE_mp3("mp3", "udio/mpeg"),
    FILE_TYPE_mp4("mp4", "ideo/mp4"),
    FILE_TYPE_mpc("mpc", "udio/x-musepack"),
    FILE_TYPE_mpe("mpe", "ideo/mpeg"),
    FILE_TYPE_mpeg("mpeg", "ideo/mpeg"),
    FILE_TYPE_mpg("mpg", "ideo/mpeg"),
    FILE_TYPE_mpga("mpga", "udio/mpeg"),
    FILE_TYPE_mpp("mpp", "udio/x-musepack"),
    FILE_TYPE_mrl("mrl", "ext/x-mrml"),
    FILE_TYPE_mrml("mrml", "ext/x-mrml"),
    FILE_TYPE_mrw("mrw", "mage/x-minolta-mrw"),
    FILE_TYPE_ms("ms", "ext/x-troff-ms"),
    FILE_TYPE_msi("msi", "pplication/x-msi"),
    FILE_TYPE_msod("msod", "mage/x-msod"),
    FILE_TYPE_msx("msx", "pplication/x-msx-rom"),
    FILE_TYPE_mtm("mtm", "udio/x-mod"),
    FILE_TYPE_mup("mup", "ext/x-mup"),
    FILE_TYPE_mxf("mxf", "pplication/mxf"),
    FILE_TYPE_n64("n64", "pplication/x-n64-rom"),
    FILE_TYPE_nb("nb", "pplication/mathematica"),
    FILE_TYPE_nc("nc", "pplication/x-netcdf"),
    FILE_TYPE_nds("nds", "pplication/x-nintendo-ds-rom"),
    FILE_TYPE_nef("nef", "mage/x-nikon-nef"),
    FILE_TYPE_nes("nes", "pplication/x-nes-rom"),
    FILE_TYPE_nfo("nfo", "ext/x-nfo"),
    FILE_TYPE_not("not", "ext/x-mup"),
    FILE_TYPE_nsc("nsc", "pplication/x-netshow-channel"),
    FILE_TYPE_nsv("nsv", "ideo/x-nsv"),
    FILE_TYPE_o("o", "pplication/x-object"),
    FILE_TYPE_obj("obj", "pplication/x-tgif"),
    FILE_TYPE_ocl("ocl", "ext/x-ocl"),
    FILE_TYPE_oda("oda", "pplication/oda"),
    FILE_TYPE_odb("odb", "pplication/vnd.oasis.opendocument.database"),
    FILE_TYPE_odc("odc", "pplication/vnd.oasis.opendocument.chart"),
    FILE_TYPE_odf("odf", "pplication/vnd.oasis.opendocument.formula"),
    FILE_TYPE_odg("odg", "pplication/vnd.oasis.opendocument.graphics"),
    FILE_TYPE_odi("odi", "pplication/vnd.oasis.opendocument.image"),
    FILE_TYPE_odm("odm", "pplication/vnd.oasis.opendocument.text-master"),
    FILE_TYPE_odp("odp", "pplication/vnd.oasis.opendocument.presentation"),
    FILE_TYPE_ods("ods", "pplication/vnd.oasis.opendocument.spreadsheet"),
    FILE_TYPE_odt("odt", "pplication/vnd.oasis.opendocument.text"),
    FILE_TYPE_oga("oga", "udio/ogg"),
    FILE_TYPE_ogg("ogg", "ideo/x-theora+ogg"),
    FILE_TYPE_ogm("ogm", "ideo/x-ogm+ogg"),
    FILE_TYPE_ogv("ogv", "ideo/ogg"),
    FILE_TYPE_ogx("ogx", "pplication/ogg"),
    FILE_TYPE_old("old", "pplication/x-trash"),
    FILE_TYPE_oleo("oleo", "pplication/x-oleo"),
    FILE_TYPE_opml("opml", "ext/x-opml+xml"),
    FILE_TYPE_ora("ora", "mage/openraster"),
    FILE_TYPE_orf("orf", "mage/x-olympus-orf"),
    FILE_TYPE_otc("otc", "pplication/vnd.oasis.opendocument.chart-template"),
    FILE_TYPE_otf("otf", "pplication/x-font-otf"),
    FILE_TYPE_otg("otg", "pplication/vnd.oasis.opendocument.graphics-template"),
    FILE_TYPE_oth("oth", "pplication/vnd.oasis.opendocument.text-web"),
    FILE_TYPE_otp("otp", "pplication/vnd.oasis.opendocument.presentation-template"),
    FILE_TYPE_ots("ots", "pplication/vnd.oasis.opendocument.spreadsheet-template"),
    FILE_TYPE_ott("ott", "pplication/vnd.oasis.opendocument.text-template"),
    FILE_TYPE_owl("owl", "pplication/rdf+xml"),
    FILE_TYPE_oxt("oxt", "pplication/vnd.openofficeorg.extension"),
    FILE_TYPE_p("p", "ext/x-pascal"),
    FILE_TYPE_p10("p10", "pplication/pkcs10"),
    FILE_TYPE_p12("p12", "pplication/x-pkcs12"),
    FILE_TYPE_p7b("p7b", "pplication/x-pkcs7-certificates"),
    FILE_TYPE_p7s("p7s", "pplication/pkcs7-signature"),
    FILE_TYPE_pack("pack", "pplication/x-java-pack200"),
    FILE_TYPE_pak("pak", "pplication/x-pak"),
    FILE_TYPE_par2("par2", "pplication/x-par2"),
    FILE_TYPE_pas("pas", "ext/x-pascal"),
    FILE_TYPE_patch("patch", "ext/x-patch"),
    FILE_TYPE_pbm("pbm", "mage/x-portable-bitmap"),
    FILE_TYPE_pcd("pcd", "mage/x-photo-cd"),
    FILE_TYPE_pcf("pcf", "pplication/x-cisco-vpn-settings"),
    FILE_TYPE_pcfgz("pcf.gz", "pplication/x-font-pcf"),
    FILE_TYPE_pcfz("pcf.z", "pplication/x-font-pcf"),
    FILE_TYPE_pcl("pcl", "pplication/vnd.hp-pcl"),
    FILE_TYPE_pcx("pcx", "mage/x-pcx"),
    FILE_TYPE_pdb("pdb", "hemical/x-pdb"),
    FILE_TYPE_pdc("pdc", "pplication/x-aportisdoc"),
    FILE_TYPE_pdf("pdf", "pplication/pdf"),
    FILE_TYPE_pdfbz2("pdf.bz2", "pplication/x-bzpdf"),
    FILE_TYPE_pdfgz("pdf.gz", "pplication/x-gzpdf"),
    FILE_TYPE_pef("pef", "mage/x-pentax-pef"),
    FILE_TYPE_pem("pem", "pplication/x-x509-ca-cert"),
    FILE_TYPE_perl("perl", "pplication/x-perl"),
    FILE_TYPE_pfa("pfa", "pplication/x-font-type1"),
    FILE_TYPE_pfb("pfb", "pplication/x-font-type1"),
    FILE_TYPE_pfx("pfx", "pplication/x-pkcs12"),
    FILE_TYPE_pgm("pgm", "mage/x-portable-graymap"),
    FILE_TYPE_pgn("pgn", "pplication/x-chess-pgn"),
    FILE_TYPE_pgp("pgp", "pplication/pgp-encrypted"),
    FILE_TYPE_php("php", "pplication/x-php"),
    FILE_TYPE_php3("php3", "pplication/x-php"),
    FILE_TYPE_php4("php4", "pplication/x-php"),
    FILE_TYPE_pict("pict", "mage/x-pict"),
    FILE_TYPE_pict1("pict1", "mage/x-pict"),
    FILE_TYPE_pict2("pict2", "mage/x-pict"),
    FILE_TYPE_pickle("pickle", "pplication/python-pickle"),
    FILE_TYPE_pk("pk", "pplication/x-tex-pk"),
    FILE_TYPE_pkipath("pkipath", "pplication/pkix-pkipath"),
    FILE_TYPE_pkr("pkr", "pplication/pgp-keys"),
    FILE_TYPE_pl("pl", "pplication/x-perl"),
    FILE_TYPE_pla("pla", "udio/x-iriver-pla"),
    FILE_TYPE_pln("pln", "pplication/x-planperfect"),
    FILE_TYPE_pls("pls", "udio/x-scpls"),
    FILE_TYPE_pm("pm", "pplication/x-perl"),
    FILE_TYPE_png("png", "mage/png"),
    FILE_TYPE_pnm("pnm", "mage/x-portable-anymap"),
    FILE_TYPE_pntg("pntg", "mage/x-macpaint"),
    FILE_TYPE_po("po", "ext/x-gettext-translation"),
    FILE_TYPE_por("por", "pplication/x-spss-por"),
    FILE_TYPE_pot("pot", "ext/x-gettext-translation-template"),
    FILE_TYPE_ppm("ppm", "mage/x-portable-pixmap"),
    FILE_TYPE_pps("pps", "pplication/vnd.ms-powerpoint"),
    FILE_TYPE_ppt("ppt", "pplication/vnd.ms-powerpoint"),
    FILE_TYPE_pptm("pptm", "pplication/vnd.openxmlformats-officedocument.presentationml.presentation"),
    FILE_TYPE_pptx("pptx", "pplication/vnd.openxmlformats-officedocument.presentationml.presentation"),
    FILE_TYPE_ppz("ppz", "pplication/vnd.ms-powerpoint"),
    FILE_TYPE_prc("prc", "pplication/x-palm-database"),
    FILE_TYPE_ps("ps", "pplication/postscript"),
    FILE_TYPE_psbz2("ps.bz2", "pplication/x-bzpostscript"),
    FILE_TYPE_psgz("ps.gz", "pplication/x-gzpostscript"),
    FILE_TYPE_psd("psd", "mage/vnd.adobe.photoshop"),
    FILE_TYPE_psf("psf", "udio/x-psf"),
    FILE_TYPE_psfgz("psf.gz", "pplication/x-gz-font-linux-psf"),
    FILE_TYPE_psflib("psflib", "udio/x-psflib"),
    FILE_TYPE_psid("psid", "udio/prs.sid"),
    FILE_TYPE_psw("psw", "pplication/x-pocket-word"),
    FILE_TYPE_pw("pw", "pplication/x-pw"),
    FILE_TYPE_py("py", "ext/x-python"),
    FILE_TYPE_pyc("pyc", "pplication/x-python-bytecode"),
    FILE_TYPE_pyo("pyo", "pplication/x-python-bytecode"),
    FILE_TYPE_qif("qif", "mage/x-quicktime"),
    FILE_TYPE_qt("qt", "ideo/quicktime"),
    FILE_TYPE_qtif("qtif", "mage/x-quicktime"),
    FILE_TYPE_qtl("qtl", "pplication/x-quicktime-media-link"),
    FILE_TYPE_qtvr("qtvr", "ideo/quicktime"),
    FILE_TYPE_ra("ra", "udio/vnd.rn-realaudio"),
    FILE_TYPE_raf("raf", "mage/x-fuji-raf"),
    FILE_TYPE_ram("ram", "pplication/ram"),
    FILE_TYPE_rar("rar", "pplication/x-rar"),
    FILE_TYPE_ras("ras", "mage/x-cmu-raster"),
    FILE_TYPE_raw("raw", "mage/x-panasonic-raw"),
    FILE_TYPE_rax("rax", "udio/vnd.rn-realaudio"),
    FILE_TYPE_rb("rb", "pplication/x-ruby"),
    FILE_TYPE_rdf("rdf", "pplication/rdf+xml"),
    FILE_TYPE_rdfs("rdfs", "pplication/rdf+xml"),
    FILE_TYPE_reg("reg", "ext/x-ms-regedit"),
    FILE_TYPE_rej("rej", "pplication/x-reject"),
    FILE_TYPE_rgb("rgb", "mage/x-rgb"),
    FILE_TYPE_rle("rle", "mage/rle"),
    FILE_TYPE_rm("rm", "pplication/vnd.rn-realmedia"),
    FILE_TYPE_rmj("rmj", "pplication/vnd.rn-realmedia"),
    FILE_TYPE_rmm("rmm", "pplication/vnd.rn-realmedia"),
    FILE_TYPE_rms("rms", "pplication/vnd.rn-realmedia"),
    FILE_TYPE_rmvb("rmvb", "pplication/vnd.rn-realmedia"),
    FILE_TYPE_rmx("rmx", "pplication/vnd.rn-realmedia"),
    FILE_TYPE_roff("roff", "ext/troff"),
    FILE_TYPE_rp("rp", "mage/vnd.rn-realpix"),
    FILE_TYPE_rpm("rpm", "pplication/x-rpm"),
    FILE_TYPE_rss("rss", "pplication/rss+xml"),
    FILE_TYPE_rt("rt", "ext/vnd.rn-realtext"),
    FILE_TYPE_rtf("rtf", "pplication/rtf"),
    FILE_TYPE_rtx("rtx", "ext/richtext"),
    FILE_TYPE_rv("rv", "ideo/vnd.rn-realvideo"),
    FILE_TYPE_rvx("rvx", "ideo/vnd.rn-realvideo"),
    FILE_TYPE_s3m("s3m", "udio/x-s3m"),
    FILE_TYPE_sam("sam", "pplication/x-amipro"),
    FILE_TYPE_sami("sami", "pplication/x-sami"),
    FILE_TYPE_sav("sav", "pplication/x-spss-sav"),
    FILE_TYPE_scm("scm", "ext/x-scheme"),
    FILE_TYPE_sda("sda", "pplication/vnd.stardivision.draw"),
    FILE_TYPE_sdc("sdc", "pplication/vnd.stardivision.calc"),
    FILE_TYPE_sdd("sdd", "pplication/vnd.stardivision.impress"),
    FILE_TYPE_sdp("sdp", "pplication/sdp"),
    FILE_TYPE_sds("sds", "pplication/vnd.stardivision.chart"),
    FILE_TYPE_sdw("sdw", "pplication/vnd.stardivision.writer"),
    FILE_TYPE_sgf("sgf", "pplication/x-go-sgf"),
    FILE_TYPE_sgi("sgi", "mage/x-sgi"),
    FILE_TYPE_sgl("sgl", "pplication/vnd.stardivision.writer"),
    FILE_TYPE_sgm("sgm", "ext/sgml"),
    FILE_TYPE_sgml("sgml", "ext/sgml"),
    FILE_TYPE_sh("sh", "pplication/x-shellscript"),
    FILE_TYPE_shar("shar", "pplication/x-shar"),
    FILE_TYPE_shn("shn", "pplication/x-shorten"),
    FILE_TYPE_siag("siag", "pplication/x-siag"),
    FILE_TYPE_sid("sid", "udio/prs.sid"),
    FILE_TYPE_sik("sik", "pplication/x-trash"),
    FILE_TYPE_sis("sis", "pplication/vnd.symbian.install"),
    FILE_TYPE_sisx("sisx", "-epoc/x-sisx-app"),
    FILE_TYPE_sit("sit", "pplication/x-stuffit"),
    FILE_TYPE_siv("siv", "pplication/sieve"),
    FILE_TYPE_sk("sk", "mage/x-skencil"),
    FILE_TYPE_sk1("sk1", "mage/x-skencil"),
    FILE_TYPE_skr("skr", "pplication/pgp-keys"),
    FILE_TYPE_slk("slk", "ext/spreadsheet"),
    FILE_TYPE_smaf("smaf", "pplication/x-smaf"),
    FILE_TYPE_smc("smc", "pplication/x-snes-rom"),
    FILE_TYPE_smd("smd", "pplication/vnd.stardivision.mail"),
    FILE_TYPE_smf("smf", "pplication/vnd.stardivision.math"),
    FILE_TYPE_smi("smi", "pplication/x-sami"),
    FILE_TYPE_smil("smil", "pplication/smil"),
    FILE_TYPE_sml("sml", "pplication/smil"),
    FILE_TYPE_sms("sms", "pplication/x-sms-rom"),
    FILE_TYPE_snd("snd", "udio/basic"),
    FILE_TYPE_so("so", "pplication/x-sharedlib"),
    FILE_TYPE_spc("spc", "pplication/x-pkcs7-certificates"),
    FILE_TYPE_spd("spd", "pplication/x-font-speedo"),
    FILE_TYPE_spec("spec", "ext/x-rpm-spec"),
    FILE_TYPE_spl("spl", "pplication/x-shockwave-flash"),
    FILE_TYPE_spx("spx", "udio/x-speex"),
    FILE_TYPE_sql("sql", "ext/x-sql"),
    FILE_TYPE_sr2("sr2", "mage/x-sony-sr2"),
    FILE_TYPE_src("src", "pplication/x-wais-source"),
    FILE_TYPE_srf("srf", "mage/x-sony-srf"),
    FILE_TYPE_srt("srt", "pplication/x-subrip"),
    FILE_TYPE_ssa("ssa", "ext/x-ssa"),
    FILE_TYPE_stc("stc", "pplication/vnd.sun.xml.calc.template"),
    FILE_TYPE_std("std", "pplication/vnd.sun.xml.draw.template"),
    FILE_TYPE_sti("sti", "pplication/vnd.sun.xml.impress.template"),
    FILE_TYPE_stm("stm", "udio/x-stm"),
    FILE_TYPE_stw("stw", "pplication/vnd.sun.xml.writer.template"),
    FILE_TYPE_sty("sty", "ext/x-tex"),
    FILE_TYPE_sub("sub", "ext/x-subviewer"),
    FILE_TYPE_sun("sun", "mage/x-sun-raster"),
    FILE_TYPE_sv4cpio("sv4cpio", "pplication/x-sv4cpio"),
    FILE_TYPE_sv4crc("sv4crc", "pplication/x-sv4crc"),
    FILE_TYPE_svg("svg", "mage/svg+xml"),
    FILE_TYPE_svgz("svgz", "mage/svg+xml-compressed"),
    FILE_TYPE_swf("swf", "pplication/x-shockwave-flash"),
    FILE_TYPE_sxc("sxc", "pplication/vnd.sun.xml.calc"),
    FILE_TYPE_sxd("sxd", "pplication/vnd.sun.xml.draw"),
    FILE_TYPE_sxg("sxg", "pplication/vnd.sun.xml.writer.global"),
    FILE_TYPE_sxi("sxi", "pplication/vnd.sun.xml.impress"),
    FILE_TYPE_sxm("sxm", "pplication/vnd.sun.xml.math"),
    FILE_TYPE_sxw("sxw", "pplication/vnd.sun.xml.writer"),
    FILE_TYPE_sylk("sylk", "ext/spreadsheet"),
    FILE_TYPE_t("t", "ext/troff"),
    FILE_TYPE_t2t("t2t", "ext/x-txt2tags"),
    FILE_TYPE_tar("tar", "pplication/x-tar"),
    FILE_TYPE_tarbz("tar.bz", "pplication/x-bzip-compressed-tar"),
    FILE_TYPE_tarbz2("tar.bz2", "pplication/x-bzip-compressed-tar"),
    FILE_TYPE_targz("tar.gz", "pplication/x-compressed-tar"),
    FILE_TYPE_tarlzma("tar.lzma", "pplication/x-lzma-compressed-tar"),
    FILE_TYPE_tarlzo("tar.lzo", "pplication/x-tzo"),
    FILE_TYPE_tarxz("tar.xz", "pplication/x-xz-compressed-tar"),
    FILE_TYPE_tarz("tar.z", "pplication/x-tarz"),
    FILE_TYPE_tbz("tbz", "pplication/x-bzip-compressed-tar"),
    FILE_TYPE_tbz2("tbz2", "pplication/x-bzip-compressed-tar"),
    FILE_TYPE_tcl("tcl", "ext/x-tcl"),
    FILE_TYPE_tex("tex", "ext/x-tex"),
    FILE_TYPE_texi("texi", "ext/x-texinfo"),
    FILE_TYPE_texinfo("texinfo", "ext/x-texinfo"),
    FILE_TYPE_tga("tga", "mage/x-tga"),
    FILE_TYPE_tgz("tgz", "pplication/x-compressed-tar"),
    FILE_TYPE_theme("theme", "pplication/x-theme"),
    FILE_TYPE_themepac("themepack", "pplication/x-windows-themepack"),
    FILE_TYPE_tif("tif", "mage/tiff"),
    FILE_TYPE_tiff("tiff", "mage/tiff"),
    FILE_TYPE_tk("tk", "ext/x-tcl"),
    FILE_TYPE_tlz("tlz", "pplication/x-lzma-compressed-tar"),
    FILE_TYPE_tnef("tnef", "pplication/vnd.ms-tnef"),
    FILE_TYPE_tnf("tnf", "pplication/vnd.ms-tnef"),
    FILE_TYPE_toc("toc", "pplication/x-cdrdao-toc"),
    FILE_TYPE_torrent("torrent", "pplication/x-bittorrent"),
    FILE_TYPE_tpic("tpic", "mage/x-tga"),
    FILE_TYPE_tr("tr", "ext/troff"),
    FILE_TYPE_ts("ts", "pplication/x-linguist"),
    FILE_TYPE_tsv("tsv", "ext/tab-separated-values"),
    FILE_TYPE_tta("tta", "udio/x-tta"),
    FILE_TYPE_ttc("ttc", "pplication/x-font-ttf"),
    FILE_TYPE_ttf("ttf", "pplication/x-font-ttf"),
    FILE_TYPE_ttx("ttx", "pplication/x-font-ttx"),
    FILE_TYPE_txt("txt", "ext/plain"),
    FILE_TYPE_txz("txz", "pplication/x-xz-compressed-tar"),
    FILE_TYPE_tzo("tzo", "pplication/x-tzo"),
    FILE_TYPE_ufraw("ufraw", "pplication/x-ufraw"),
    FILE_TYPE_ui("ui", "pplication/x-designer"),
    FILE_TYPE_uil("uil", "ext/x-uil"),
    FILE_TYPE_ult("ult", "udio/x-mod"),
    FILE_TYPE_uni("uni", "udio/x-mod"),
    FILE_TYPE_uri("uri", "ext/x-uri"),
    FILE_TYPE_url("url", "ext/x-uri"),
    FILE_TYPE_ustar("ustar", "pplication/x-ustar"),
    FILE_TYPE_vala("vala", "ext/x-vala"),
    FILE_TYPE_vapi("vapi", "ext/x-vala"),
    FILE_TYPE_vcf("vcf", "ext/directory"),
    FILE_TYPE_vcs("vcs", "ext/calendar"),
    FILE_TYPE_vct("vct", "ext/directory"),
    FILE_TYPE_vda("vda", "mage/x-tga"),
    FILE_TYPE_vhd("vhd", "ext/x-vhdl"),
    FILE_TYPE_vhdl("vhdl", "ext/x-vhdl"),
    FILE_TYPE_viv("viv", "ideo/vivo"),
    FILE_TYPE_vivo("vivo", "ideo/vivo"),
    FILE_TYPE_vlc("vlc", "udio/x-mpegurl"),
    FILE_TYPE_vob("vob", "ideo/mpeg"),
    FILE_TYPE_voc("voc", "udio/x-voc"),
    FILE_TYPE_vor("vor", "pplication/vnd.stardivision.writer"),
    FILE_TYPE_vst("vst", "mage/x-tga"),
    FILE_TYPE_wav("wav", "udio/x-wav"),
    FILE_TYPE_wax("wax", "udio/x-ms-asx"),
    FILE_TYPE_wb1("wb1", "pplication/x-quattropro"),
    FILE_TYPE_wb2("wb2", "pplication/x-quattropro"),
    FILE_TYPE_wb3("wb3", "pplication/x-quattropro"),
    FILE_TYPE_wbmp("wbmp", "mage/vnd.wap.wbmp"),
    FILE_TYPE_wcm("wcm", "pplication/vnd.ms-works"),
    FILE_TYPE_wdb("wdb", "pplication/vnd.ms-works"),
    FILE_TYPE_webm("webm", "ideo/webm"),
    FILE_TYPE_wk1("wk1", "pplication/vnd.lotus-1-2-3"),
    FILE_TYPE_wk3("wk3", "pplication/vnd.lotus-1-2-3"),
    FILE_TYPE_wk4("wk4", "pplication/vnd.lotus-1-2-3"),
    FILE_TYPE_wks("wks", "pplication/vnd.ms-works"),
    FILE_TYPE_wma("wma", "udio/x-ms-wma"),
    FILE_TYPE_wmf("wmf", "mage/x-wmf"),
    FILE_TYPE_wml("wml", "ext/vnd.wap.wml"),
    FILE_TYPE_wmls("wmls", "ext/vnd.wap.wmlscript"),
    FILE_TYPE_wmv("wmv", "ideo/x-ms-wmv"),
    FILE_TYPE_wmx("wmx", "udio/x-ms-asx"),
    FILE_TYPE_wp("wp", "pplication/vnd.wordperfect"),
    FILE_TYPE_wp4("wp4", "pplication/vnd.wordperfect"),
    FILE_TYPE_wp5("wp5", "pplication/vnd.wordperfect"),
    FILE_TYPE_wp6("wp6", "pplication/vnd.wordperfect"),
    FILE_TYPE_wpd("wpd", "pplication/vnd.wordperfect"),
    FILE_TYPE_wpg("wpg", "pplication/x-wpg"),
    FILE_TYPE_wpl("wpl", "pplication/vnd.ms-wpl"),
    FILE_TYPE_wpp("wpp", "pplication/vnd.wordperfect"),
    FILE_TYPE_wps("wps", "pplication/vnd.ms-works"),
    FILE_TYPE_wri("wri", "pplication/x-mswrite"),
    FILE_TYPE_wrl("wrl", "odel/vrml"),
    FILE_TYPE_wv("wv", "udio/x-wavpack"),
    FILE_TYPE_wvc("wvc", "udio/x-wavpack-correction"),
    FILE_TYPE_wvp("wvp", "udio/x-wavpack"),
    FILE_TYPE_wvx("wvx", "udio/x-ms-asx"),
    FILE_TYPE_x3f("x3f", "mage/x-sigma-x3f"),
    FILE_TYPE_xac("xac", "pplication/x-gnucash"),
    FILE_TYPE_xbel("xbel", "pplication/x-xbel"),
    FILE_TYPE_xbl("xbl", "pplication/xml"),
    FILE_TYPE_xbm("xbm", "mage/x-xbitmap"),
    FILE_TYPE_xcf("xcf", "mage/x-xcf"),
    FILE_TYPE_xcfbz2("xcf.bz2", "mage/x-compressed-xcf"),
    FILE_TYPE_xcfgz("xcf.gz", "mage/x-compressed-xcf"),
    FILE_TYPE_xhtml("xhtml", "pplication/xhtml+xml"),
    FILE_TYPE_xi("xi", "udio/x-xi"),
    FILE_TYPE_xla("xla", "pplication/vnd.ms-excel"),
    FILE_TYPE_xlc("xlc", "pplication/vnd.ms-excel"),
    FILE_TYPE_xld("xld", "pplication/vnd.ms-excel"),
    FILE_TYPE_xlf("xlf", "pplication/x-xliff"),
    FILE_TYPE_xliff("xliff", "pplication/x-xliff"),
    FILE_TYPE_xll("xll", "pplication/vnd.ms-excel"),
    FILE_TYPE_xlm("xlm", "pplication/vnd.ms-excel"),
    FILE_TYPE_xlsm("xlsm", "pplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),
    FILE_TYPE_xlt("xlt", "pplication/vnd.ms-excel"),
    FILE_TYPE_xlw("xlw", "pplication/vnd.ms-excel"),
    FILE_TYPE_xm("xm", "udio/x-xm"),
    FILE_TYPE_xmf("xmf", "udio/x-xmf"),
    FILE_TYPE_xmi("xmi", "ext/x-xmi"),
    FILE_TYPE_xml("xml", "pplication/xml"),
    FILE_TYPE_xpm("xpm", "mage/x-xpixmap"),
    FILE_TYPE_xps("xps", "pplication/vnd.ms-xpsdocument"),
    FILE_TYPE_xsl("xsl", "pplication/xml"),
    FILE_TYPE_xslfo("xslfo", "ext/x-xslfo"),
    FILE_TYPE_xslt("xslt", "pplication/xml"),
    FILE_TYPE_xspf("xspf", "pplication/xspf+xml"),
    FILE_TYPE_xul("xul", "pplication/vnd.mozilla.xul+xml"),
    FILE_TYPE_xwd("xwd", "mage/x-xwindowdump"),
    FILE_TYPE_xyz("xyz", "hemical/x-pdb"),
    FILE_TYPE_xz("xz", "pplication/x-xz"),
    FILE_TYPE_w2p("w2p", "pplication/w2p"),
    FILE_TYPE_z("z", "pplication/x-compress"),
    FILE_TYPE_zabw("zabw", "pplication/x-abiword"),
    FILE_TYPE_zip("zip", "pplication/zip"),
    FILE_TYPE_zoo("zoo", "pplication/x-zoo"),
    ;


    //文件类型
    private String fileType;

    private String contentType;

    FileTypeEnum(String fileType, String contentType) {
        this.fileType = fileType;
        this.contentType = contentType;
    }

    public static String getContentType(String fileType) {
        for (FileTypeEnum e : FileTypeEnum.values()) {
            if (e.getFileType().equals(fileType)) {
                return e.getContentType();
            }
        }
        return "";
    }

    /**
     * 获取fileType
     *
     * @param contentType
     * @return
     */
    public static String getFileType(String contentType) {
        for (FileTypeEnum value : FileTypeEnum.values()) {
            if (value.getContentType().equals(contentType)) {
                return value.getFileType();
            }
        }
        return null;
    }

    public String getFileType() {
        return fileType;
    }

    public String getContentType() {
        return contentType;
    }
}

上传oss操作

/**
     * 异步上传OSS文件
     *
     * @param bucketName
     * @param objectName
     * @param stream
     * @return
     */
    @Async("asyncServiceExecutor")
    public Future<Boolean> asyncUploadOSSDoc(String bucketName, String objectName, InputStream stream) {
        File output = null;
        try {
            long toss1 = System.currentTimeMillis();
            //压缩7z
            Map map = compressUtil.compress7z(stream, objectName);
            InputStream in = (InputStream) map.get("in");
            output = (File) map.get("output");
            //注意 下面的objectName需要换成map里面的objectName参数,本代码不换是因为历史原因。
            ossTemplate.putObject(bucketName, objectName, in);
            long toss2 = System.currentTimeMillis();
            log.info("上传OSS文件耗时:{}毫秒", toss2 - toss1);
        } catch (Exception e) {
            log.error("上传OSS文件失败:{},{},失败信息:", bucketName, objectName, e);
            return new AsyncResult<>(Boolean.FALSE);
        } finally {
            try {
                if (stream != null) {
                    stream.close();
                }
            } catch (Exception closeException) {
            }
            try {
                output.delete();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return new AsyncResult<>(Boolean.TRUE);
    }

通过以上操作可以将文件压缩成7z上传到oss上,解压缩方式如下

 @PostMapping(value = "/detail")
    public HttpResult<String> findVchExecutelog(@RequestBody VchExecutelogCondition condition) {
        HttpResult<String> result = new HttpResult<>();
        InputStream in = null;
        S3Object s3Object = null;
        File targetFile = null;
        try {
            if (condition == null) {
                log.info("findVchExecutelog|interface|入参为空");
                return HttpResult.asResponse(WebErrorCode.SYS_PARAM_ERROR);
            }
            //input为压缩文件存放地址
            s3Object = ossTemplate.getObject(bucketName, condition.getInput());
            Map map = compressUtil.deCompress(s3Object.getObjectContent());
            in = (InputStream) map.get("inputstream");
            targetFile = (File) map.get("targetFile");
            return HttpResult.successResponse(IOUtils.toString(in, "utf-8"));
        } catch (Exception e) {
            e.printStackTrace();
            log.info("findVchExecutelog|interface|数据查询失败,入参:{}", JsonUtil.toJson(condition));
            return HttpResult.asResponse(DefaultErrorCode.UNKNOWN_ERROR);
        } finally {
            //关闭oss流
            IOUtils.closeQuietly(s3Object);
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (Objects.nonNull(targetFile)) {
                targetFile.delete();
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值