上传图片到OSS,并按指定大小范围压缩图片。完整工具类+三层调用

使用阿里的Oss服务器,做图片服务器。 项目功能为,前端,调用后端的接口,上传用户的图片!

1、controller类

@RestController
@RequestMapping("/oss/file")
public class FileController {

    private static final Logger logger = LoggerFactory.getLogger(FileController.class);

    @Autowired
    private IFileService service;

    /**
     * 上传文件到临时库,并使用 上传文件的原文件名
     * @param file
     * @return
     */
    @PostMapping(value = "/uploadFileUsingOriginalFilename")
    public ResultRsp uploadFileUsingOriginalFilename(MultipartFile file){
          return ResultRsp.success(service.uploadFileUsingOriginalFilename(file),"文件上传成功");
     
    }

    /**
     * 上传文件到临时库,使用随机生成的文件名
     * @param file
     * @return
     */
    @PostMapping(value = "/uploadFile")
    public Object uploadFile(MultipartFile file){
        
          return ResultRsp.success(service.uploadFile(file),"文件上传成功");
       
    }
}

2、service类

@Service
public class IFileServiceImpl implements IFileService {

    private final static Logger LOGGER = LoggerFactory.getLogger(IFileServiceImpl.class);
    private final static String FILE_URL = "fileUrl";

    /**
     * 上传文件到临时库,并使用 上传文件的原文件名
     * @param file
     * @return
     * @throws IOException
     */
    @Override
    public Map uploadFileUsingOriginalFilename(MultipartFile file) throws IOException {
        this.checkFile(file);
        String name = OssClientUtil.uploadFileTemp(file, file.getOriginalFilename());
        String fileUrl = OssClientUtil.getFileUrlFromTemp(name,false);
        return MapUtils.toMap(FILE_URL,fileUrl);
    }
    /**
     * 上传文件到临时库,并使用随机名
     * @param file
     * @return
     * @throws IOException
     */
    @Override
    public Map uploadFile(MultipartFile file) throws IOException {
        this.checkFile(file);
        String name = OssClientUtil.uploadFileTemp(file);
        String fileUrl = OssClientUtil.getFileUrlFromTemp(name,false);
        return MapUtils.toMap(FILE_URL,fileUrl);
    }

        /**
     * 检查 文件是否为null
     * @param file
     */
    private void checkFile(MultipartFile file){
        if (Objects.isNull(file) || Objects.isNull(file.getOriginalFilename())){
            throw new SecurityException(ErrorCode.Null.OBJECT_NULL,"文件对象为null");
        }
        LOGGER.debug("上传文件:filename=" + file.getOriginalFilename());
    }


    public class MapUtils {

        public static Map toMap(String key, Object value){
            HashMap map = new HashMap(1);
            map.put(key,value);
            return map;
        }

    }


}

3、OssClientUtil类

 @Component
public class OssClientUtil {
    private static final Logger LOGGER = LoggerFactory.getLogger(OssClientUtil.class);


    @Autowired
    private OssConfig ossConfig;

    private static OSSClient ossClient;
    private static OSSClient ossClientInternal;

    private static UidGenerator uidGenerator;

    private static OssClientUtil ossClientUtil;

    private static String baseDir = "data/";

    /**
     * 文件正式存储目录
     */
    private static String fileDir = baseDir + "file/";
    /**
     * 文件临时存储目录
     */
    private static String tempDir = baseDir + "temp/";

    private static boolean intranet;

    /**
     * 初始化
     */
    @PostConstruct
    public void init() {
        ossClientUtil = this;
        LOGGER.debug("OSS Util 加载的配置数据为{}", ossClientUtil.ossConfig.toString());
        ossClient = new OSSClient(ossClientUtil.ossConfig.getEndpoint()
                , ossClientUtil.ossConfig.getAccessKeyId()
                , ossClientUtil.ossConfig.getAccessKeySecret());
        ossClientInternal = new OSSClient(ossClientUtil.ossConfig.getEndpointInternal()
                , ossClientUtil.ossConfig.getAccessKeyId()
                , ossClientUtil.ossConfig.getAccessKeySecret());
        if (ossClientUtil.ossConfig.getIntranet()) {
            intranet = true;
        } else {
            intranet = false;
        }

        uidGenerator = new SnowflakeUidGenerator();
    }

    /**
     * 销毁
     */
    public static void destory() {
        ossClient.shutdown();
        ossClientInternal.shutdown();
    }



 /**
     * 上传文件到临时库,并使用指定文件名,限定大小10M
     *
     * @param file     文件流
     * @param fileName 自定义文件名,包含后缀名
     * @return 返回时间码拼接的文件名,目的是为了避免重复。格式为  "时间串_随机码_fileName"
     */
    public static String uploadFileTemp(MultipartFile file, String fileName) throws MyFileException, IOException {
        OssUtil.checkFileSizeGt(file, OssUtil.M_10);
        String name = System.currentTimeMillis() + "_" + uidGenerator.nextId() + "_" + fileName;
        InputStream inputStream;
        try {
            inputStream = file.getInputStream();
        } catch (Exception e) {
            throw new MyFileException(ErrorCode.File.FILE_NOT_FOUND, "文件上传失败");
        }
        uploadFileTemp(inputStream, name);
        return name;

    }

        /**
     * 上传文件到OSS服务器 的临时目录下,  如果同名文件会覆盖服务器上的文件
     *
     * @param inputStream 文件流
     * @param fileName    文件名称 包括后缀名
     * @return 出错返回"" ,唯一MD5数字签名
     * @throws MyFileException
     * @throws IOException
     */
    public static String uploadFileTemp(InputStream inputStream, String fileName) throws MyFileException, IOException {

        return uploadFileOSSData(inputStream, ossClientUtil.ossConfig.getTempData(), fileName, tempDir);
    }


    
    /**
     * 上传到OSS服务器 指定目录下
     *
     * @param inputStream 文件流
     * @param bucketName  bucket名
     * @param fileName    新的文件名称
     * @param dir         上传至目标目录下
     * @return 文件上传成功后的,MD5码
     * @throws MyFileException
     * @throws IOException
     */
    public static String uploadFileOSSData(InputStream inputStream, String bucketName, String fileName, String dir) throws MyFileException, IOException {
        //压缩图片
        inputStream = changeSize(inputStream,ossClientUtil.ossConfig.getSize());

        OSSClient ossClient;
        if (OssClientUtil.intranet) {
            ossClient = OssClientUtil.ossClientInternal;
        } else {
            ossClient = OssClientUtil.ossClient;
        }
        String ret = "";
        try {
            //创建上传Object的Metadata
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentLength(inputStream.available());
            objectMetadata.setCacheControl("no-cache");
            objectMetadata.setHeader("Pragma", "no-cache");
            objectMetadata.setContentType(OssUtil.getContentType(fileName.substring(fileName.lastIndexOf("."))));
            objectMetadata.setContentDisposition("inline;filename=" + fileName);
            //设置 公共读
            objectMetadata.setObjectAcl(CannedAccessControlList.PublicRead);
            //上传文件
            PutObjectResult putResult = ossClient.putObject(bucketName, dir + fileName, inputStream, objectMetadata);
            ret = putResult.getETag();
        } catch (RuntimeException e) {
            LOGGER.error("上传文件到OSS服务器 发生错误:{}", e.getMessage());
            throw new MyFileException(ErrorCode.File.FILE_OSS_ERROR, e.getMessage(), e.getLocalizedMessage());
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
        }
        return ret;
    }


     /**
     * 递归 压缩文件流,到指定大小范围内
     * @param inputStream
     * @param limitSize
     * @return
     * @throws IOException
     */
    public static InputStream changeSize(InputStream inputStream,int limitSize) throws IOException {
        //先判断 文件大小是否超过 规定大小。
        if (! (inputStream.available()>limitSize)){
            return inputStream;
        }
        // 压缩比率为 0.8
        float ratio = 0.8f;
        BufferedImage bufImage =  ImageIO.read(inputStream);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        //写入 临时文件
        File file = new File(OssClientUtil.uidGenerator.nextId()+".png");
        Thumbnails.of(bufImage).scale(ratio).toFile(file);
        //获取输出流
        inputStream = new FileInputStream(file);
        //删除临时文件
        file.delete();
        LOGGER.info("转换后的文件大小为{}",inputStream.available());
        //递归调用
        return changeSize(inputStream,limitSize);
    }

}

4、OssUtil类


/**
 * @Author: seowen
 * @Date: 2019/10/25 14:52
 * @Version 1.0
 */
public class OssUtil {

    public static final long  KB_512 = 512*1024;
    public static final long  M_5 = 5*1024*1024;
    public static final long  M_10 = 10*1024*1024;
    public static final long  G_1 = 1*1024*1024*1024;

    public static final long  Year = 1*365*24*3600L*1000;
    /**
     * 验证 文件大小,不能大于 限定大小
     * @param file
     * @param limitSize  字节
     */
    public static void checkFileSizeGt(MultipartFile file,long limitSize){
        if (file.getSize() > limitSize) {
            throw new MyFileException(ErrorCode.File.FILE_SIZE_BIG,"上传文件大小不能大于:"+limitSize);
        }
    }
    /**
     * 验证 文件大小,不能小于 限定大小
     * @param file
     * @param limitSize  字节
     */
    public static void checkFileSizeLt(MultipartFile file,long limitSize){
        if (file.getSize() < limitSize) {
            throw new MyFileException(ErrorCode.File.FILE_SIZE_SMALL,"上传文件大小不能小于:"+limitSize);
        }
    }

    /**
     * 验证 文件大小,只能在 限定大小之间
     * @param file
     * @param ltLimitSize
     * @param gtLimitSize
     */
    public static void checkFileSizeBetween(MultipartFile file,long ltLimitSize,long gtLimitSize){
        if (file.getSize() < ltLimitSize || file.getSize() > gtLimitSize) {
            throw new MyFileException(ErrorCode.File.FILE_SIZE_ERROR,"上传文件大小超出限定范围,范围为:"+ltLimitSize+" 和 "+gtLimitSize);
        }
    }

    /**
     * Description: 判断OSS服务文件上传时文件的contentType
     *
     * @param fileNameExtension 文件后缀
     * @return String
     */
    public static String getContentType(String fileNameExtension) {
        switch(fileNameExtension) {
            case ".":  return "application/x-" ;
            case ".*":  return "application/octet-stream" ;
            case ".pdf":  return "application/pdf" ;
            case ".ai":  return "application/postscript" ;
            case ".edi":  return "application/EDIFACT" ;
            case ".json":  return "application/json" ;
            case ".js":  return "application/javascript" ;
            case ".ogg":  return "application/ogg" ;
            case ".rdf":  return "application/rdf+xml" ;
            case ".woff":  return "application/font-woff" ;
            case ".xhtml":  return "application/xhtml+xml" ;
            case ".xml":  return "application/xml" ;
            case ".dtd":  return "application/xml-dtd" ;
            case ".zip":  return "application/zip" ;
            case ".gzip":  return "application/gzip" ;
            case "0.001":  return "application/x-001" ;
            case "0.301":  return "application/x-301" ;
            case "0.906":  return "application/x-906" ;
            case ".a11":  return "application/x-a11" ;
            case ".awf":  return "application/vnd.adobe.workflow" ;
            case ".bmp":  return "application/x-bmp" ;
            case ".c4t":  return "application/x-c4t" ;
            case ".cal":  return "application/x-cals" ;
            case ".cdf":  return "application/x-netcdf" ;
            case ".cel":  return "application/x-cel" ;
            case ".cg4":  return "application/x-g4" ;
            case ".cit":  return "application/x-cit" ;
            case ".bot":  return "application/x-bot" ;
            case ".c90":  return "application/x-c90" ;
            case ".cat":  return "application/vnd.ms-pki.seccat" ;
            case ".cdr":  return "application/x-cdr" ;
            case ".cer":  return "application/x-x509-ca-cert" ;
            case ".cgm":  return "application/x-cgm" ;
            case ".cmx":  return "application/x-cmx" ;
            case ".crl":  return "application/pkix-crl" ;
            case ".csi":  return "application/x-csi" ;
            case ".cut":  return "application/x-cut" ;
            case ".dbm":  return "application/x-dbm" ;
            case ".cmp":  return "application/x-cmp" ;
            case ".cot":  return "application/x-cot" ;
            case ".crt":  return "application/x-x509-ca-cert" ;
            case ".dbf":  return "application/x-dbf" ;
            case ".dbx":  return "application/x-dbx" ;
            case ".dcx":  return "application/x-dcx" ;
            case ".dgn":  return "application/x-dgn" ;
            case ".dll":  return "application/x-msdownload" ;
            case ".dot":  return "application/msword" ;
            case ".der":  return "application/x-x509-ca-cert" ;
            case ".dib":  return "application/x-dib" ;
            case ".doc":  return "application/msword" ;
            case ".drw":  return "application/x-drw" ;
            case ".dwf":  return "application/x-dwf" ;
            case ".dxb":  return "application/x-dxb" ;
            case ".edn":  return "application/vnd.adobe.edn" ;
            case ".dwg":  return "application/x-dwg" ;
            case ".dxf":  return "application/x-dxf" ;
            case ".emf":  return "application/x-emf" ;
            case ".epi":  return "application/x-epi" ;
            case ".eps":  return "application/postscript" ;
            case ".exe":  return "application/x-msdownload" ;
            case ".fdf":  return "application/vnd.fdf" ;
            case ".etd":  return "application/x-ebx" ;
            case ".fif":  return "application/fractals" ;
            case ".frm":  return "application/x-frm" ;
            case ".gbr":  return "application/x-gbr" ;
            case ".g4":  return "application/x-g4" ;
            case ".gl2":  return "application/x-gl2" ;
            case ".hgl":  return "application/x-hgl" ;
            case ".hpg":  return "application/x-hpgl" ;
            case ".hqx":  return "application/mac-binhex40" ;
            case ".hta":  return "application/hta" ;
            case ".gp4":  return "application/x-gp4" ;
            case ".hmr":  return "application/x-hmr" ;
            case ".hpl":  return "application/x-hpl" ;
            case ".hrf":  return "application/x-hrf" ;
            case ".icb":  return "application/x-icb" ;
            case ".ico":  return "application/x-ico" ;
            case ".ig4":  return "application/x-g4" ;
            case ".iii":  return "application/x-iphone" ;
            case ".ins":  return "application/x-internet-signup" ;
            case ".iff":  return "application/x-iff" ;
            case ".igs":  return "application/x-igs" ;
            case ".img":  return "application/x-img" ;
            case ".isp":  return "application/x-internet-signup" ;
            case ".jpe":  return "application/x-jpe" ;
            case ".jpg":  return "application/x-jpg" ;
            case ".lar":  return "application/x-laplayer-reg" ;
            case ".latex":  return "application/x-latex" ;
            case ".lbm":  return "application/x-lbm" ;
            case ".ls":  return "application/x-javascript" ;
            case ".ltr":  return "application/x-ltr" ;
            case ".man":  return "application/x-troff-man" ;
            case ".mdb":  return "application/msaccess" ;
            case ".mac":  return "application/x-mac" ;
            case ".mp3":  return "audio/mp3";
            case ".mp4":  return "video/mpeg4";
            case ".mfp":  return "application/x-shockwave-flash" ;
            case ".mi":  return "application/x-mi" ;
            case ".mil":  return "application/x-mil" ;
            case ".mocha":  return "application/x-javascript" ;
            case ".mpd":  return "application/vnd.ms-project" ;
            case ".mpp":  return "application/vnd.ms-project" ;
            case ".mpt":  return "application/vnd.ms-project" ;
            case ".mpw":  return "application/vnd.ms-project" ;
            case ".mpx":  return "application/vnd.ms-project" ;
            case ".mxp":  return "application/x-mmxp" ;
            case ".nrf":  return "application/x-nrf" ;
            case ".out":  return "application/x-out" ;
            case ".p12":  return "application/x-pkcs12" ;
            case ".p7c":  return "application/pkcs7-mime" ;
            case ".p7r":  return "application/x-pkcs7-certreqresp" ;
            case ".pc5":  return "application/x-pc5" ;
            case ".pcl":  return "application/x-pcl" ;
            case ".pdx":  return "application/vnd.adobe.pdx" ;
            case ".pgl":  return "application/x-pgl" ;
            case ".pko":  return "application/vnd.ms-pki.pko" ;
            case ".p10":  return "application/pkcs10" ;
            case ".p7b":  return "application/x-pkcs7-certificates" ;
            case ".p7m":  return "application/pkcs7-mime" ;
            case ".p7s":  return "application/pkcs7-signature" ;
            case ".pci":  return "application/x-pci" ;
            case ".pcx":  return "application/x-pcx" ;
            case ".pfx":  return "application/x-pkcs12" ;
            case ".pic":  return "application/x-pic" ;
            case ".pl":  return "application/x-perl" ;
            case ".plt":  return "application/x-plt" ;
            case ".png":  return "application/x-png" ;
            case ".ppa":  return "application/vnd.ms-powerpoint" ;
            case ".pps":  return "application/vnd.ms-powerpoint" ;
            case ".ppt":  return "application/x-ppt" ;
            case ".prf":  return "application/pics-rules" ;
            case ".prt":  return "application/x-prt" ;
            case ".ps":  return "application/postscript" ;
            case ".pwz":  return "application/vnd.ms-powerpoint" ;
            case ".ra":  return "audio/vnd.rn-realaudio" ;
            case ".ras":  return "application/x-ras" ;
            case ".pot":  return "application/vnd.ms-powerpoint" ;
            case ".ppm":  return "application/x-ppm" ;
            case ".pr":  return "application/x-pr" ;
            case ".prn":  return "application/x-prn" ;
            case ".ptn":  return "application/x-ptn" ;
            case ".red":  return "application/x-red" ;
            case ".rjs":  return "application/vnd.rn-realsystem-rjs" ;
            case ".rlc":  return "application/x-rlc" ;
            case ".rm":  return "application/vnd.rn-realmedia" ;
            case ".rat":  return "application/rat-file" ;
            case ".rec":  return "application/vnd.rn-recording" ;
            case ".rgb":  return "application/x-rgb" ;
            case ".rjt":  return "application/vnd.rn-realsystem-rjt" ;
            case ".rle":  return "application/x-rle" ;
            case ".rmf":  return "application/vnd.adobe.rmf" ;
            case ".rmj":  return "application/vnd.rn-realsystem-rmj" ;
            case ".rmp":  return "application/vnd.rn-rn_music_package" ;
            case ".rmvb":  return "application/vnd.rn-realmedia-vbr" ;
            case ".rnx":  return "application/vnd.rn-realplayer" ;
            case ".rpm":  return "audio/x-pn-realaudio-plugin" ;
            case ".rms":  return "application/vnd.rn-realmedia-secure" ;
            case ".rmx":  return "application/vnd.rn-realsystem-rmx" ;
            case ".rsml":  return "application/vnd.rn-rsml" ;
            case ".rtf":  return "application/msword" ;
            case ".rv":  return "video/vnd.rn-realvideo" ;
            case ".sat":  return "application/x-sat" ;
            case ".sdw":  return "application/x-sdw" ;
            case ".slb":  return "application/x-slb" ;
            case ".sam":  return "application/x-sam" ;
            case ".sdp":  return "application/sdp" ;
            case ".sit":  return "application/x-stuffit" ;
            case ".sld":  return "application/x-sld" ;
            case ".smi":  return "application/smil" ;
            case ".smk":  return "application/x-smk" ;
            case ".smil":  return "application/smil" ;
            case ".spc":  return "application/x-pkcs7-certificates" ;
            case ".spl":  return "application/futuresplash" ;
            case ".ssm":  return "application/streamingmedia" ;
            case ".stl":  return "application/vnd.ms-pki.stl" ;
            case ".sst":  return "application/vnd.ms-pki.certstore" ;
            case ".tdf":  return "application/x-tdf" ;
            case ".tga":  return "application/x-tga" ;
            case ".sty":  return "application/x-sty" ;
            case ".swf":  return "application/x-shockwave-flash" ;
            case ".tg4":  return "application/x-tg4" ;
            case ".tif":  return "application/x-tif" ;
            case ".vdx":  return "application/vnd.visio" ;
            case ".vpg":  return "application/x-vpeg005" ;
            case ".vst":  return "application/vnd.visio" ;
            case ".vsw":  return "application/vnd.visio" ;
            case ".vtx":  return "application/vnd.visio" ;
            case ".torrent":  return "application/x-bittorrent" ;
            case ".vda":  return "application/x-vda" ;
            case ".vsd":  return "application/vnd.visio" ;
            case ".vss":  return "application/vnd.visio" ;
            case ".vsx":  return "application/vnd.visio" ;
            case ".wb1":  return "application/x-wb1" ;
            case ".wb3":  return "application/x-wb3" ;
            case ".wiz":  return "application/msword" ;
            case ".wk4":  return "application/x-wk4" ;
            case ".wks":  return "application/x-wks" ;
            case ".wb2":  return "application/x-wb2" ;
            case ".wk3":  return "application/x-wk3" ;
            case ".wkq":  return "application/x-wkq" ;
            case ".wmf":  return "application/x-wmf" ;
            case ".wmd":  return "application/x-ms-wmd" ;
            case ".wp6":  return "application/x-wp6" ;
            case ".wpg":  return "application/x-wpg" ;
            case ".wq1":  return "application/x-wq1" ;
            case ".wri":  return "application/x-wri" ;
            case ".ws":  return "application/x-ws" ;
            case ".wmz":  return "application/x-ms-wmz" ;
            case ".wpd":  return "application/x-wpd" ;
            case ".wpl":  return "application/vnd.ms-wpl" ;
            case ".wr1":  return "application/x-wr1" ;
            case ".wrk":  return "application/x-wrk" ;
            case ".ws2":  return "application/x-ws" ;
            case ".xdp":  return "application/vnd.adobe.xdp" ;
            case ".xfd":  return "application/vnd.adobe.xfd" ;
            case ".xfdf":  return "application/vnd.adobe.xfdf" ;
            case ".xls":  return "application/vnd.ms-excel" ;
            case ".xwd":  return "application/x-xwd" ;
            case ".sis":  return "application/vnd.symbian.install" ;
            case ".x_t":  return "application/x-x_t" ;
            case ".apk":  return "application/vnd.android.package-archive" ;
            case ".x_b":  return "application/x-x_b" ;
            case ".sisx":  return "application/vnd.symbian.install" ;
            case ".ipa":  return "application/vnd.iphone" ;
            case ".xap":  return "application/x-silverlight-app" ;
            case ".xlw":  return "application/x-xlw" ;
            case ".xpl":  return "audio/scpls" ;
            case ".anv":  return "application/x-anv" ;
            case ".uin":  return "application/x-icq" ;
            case ".001":  return " application/x-001";
            case ".301":  return " application/x-301";
            case ".323":  return " text/h323";
            case ".906":  return " application/x-906";
            case ".907":  return " drawing/907";
            case ".acp":  return " audio/x-mei-aac";
            case ".aif":  return " audio/aiff";
            case ".aifc":  return " audio/aiff";
            case ".aiff":  return " audio/aiff";
            case ".asa":  return " text/asa";
            case ".asf":  return " video/x-ms-asf";
            case ".asp":  return " text/asp";
            case ".asx":  return " video/x-ms-asf";
            case ".au":  return " audio/basic";
            case ".avi":  return " video/avi";
            case ".biz":  return " text/xml";
            case ".class":  return " java/*";
            case ".cml":  return " text/xml";
            case ".css":  return " text/css";
            case ".dcd":  return " text/xml";
            case ".eml":  return " message/rfc822";
            case ".ent":  return " text/xml";
            case ".fax":  return " image/fax";
            case ".fo":  return " text/xml";
            case ".gcd":  return " application/x-gcd";
            case ".gif":  return " image/gif";
            case ".htc":  return " text/x-component";
            case ".htm":  return " text/html";
            case ".html":  return " text/html";
            case ".htt":  return " text/webviewhtml";
            case ".htx":  return " text/html";
            case ".IVF":  return " video/x-ivf";
            case ".java":  return " java/*";
            case ".jfif":  return " image/jpeg";
            case ".jpeg":  return " image/jpeg";
            case ".jsp":  return " text/html";
            case ".la1":  return " audio/x-liquid-file";
            case ".lavs":  return " audio/x-liquid-secure";
            case ".lmsff":  return " audio/x-la-lms";
            case ".m1v":  return " video/x-mpeg";
            case ".m2v":  return " video/x-mpeg";
            case ".m3u":  return " audio/mpegurl";
            case ".m4e":  return " video/mpeg4";
            case ".math":  return " text/xml";
            case ".mht":  return " message/rfc822";
            case ".mhtml":  return " message/rfc822";
            case ".mid":  return " audio/mid";
            case ".midi":  return " audio/mid";
            case ".mml":  return " text/xml";
            case ".mnd":  return " audio/x-musicnet-download";
            case ".mns":  return " audio/x-musicnet-stream";
            case ".movie":  return " video/x-sgi-movie";
            case ".mp1":  return " audio/mp1";
            case ".mp2":  return " audio/mp2";
            case ".mp2v":  return " video/mpeg";
            case ".mpa":  return " video/x-mpg";
            case ".mpe":  return " video/x-mpeg";
            case ".mpeg":  return " video/mpg";
            case ".mpg":  return " video/mpg";
            case ".mpga":  return " audio/rn-mpeg";
            case ".mps":  return " video/x-mpeg";
            case ".mpv":  return " video/mpg";
            case ".mpv2":  return " video/mpeg";
            case ".mtx":  return " text/xml";
            case ".net":  return " image/pnetvue";
            case ".nws":  return " message/rfc822";
            case ".odc":  return " text/x-ms-odc";
            case ".plg":  return " text/html";
            case ".pls":  return " audio/scpls";
            case ".r3t":  return " text/vnd.rn-realtext3d";
            case ".ram":  return " audio/x-pn-realaudio";
            case ".rmi":  return " audio/mid";
            case ".rmm":  return " audio/x-pn-realaudio";
            case ".rp":  return " image/vnd.rn-realpix";
            case ".rt":  return " text/vnd.rn-realtext";
            case ".slk":  return " drawing/x-slk";
            case ".snd":  return " audio/basic";
            case ".sol":  return " text/plain";
            case ".sor":  return " text/plain";
            case ".spp":  return " text/xml";
            case ".stm":  return " text/html";
            case ".svg":  return " text/xml";
            case ".tiff":  return " image/tiff";
            case ".tld":  return " text/xml";
            case ".top":  return " drawing/x-top";
            case ".tsd":  return " text/xml";
            case ".txt":  return " text/plain";
            case ".uls":  return " text/iuls";
            case ".vcf":  return " text/x-vcard";
            case ".vml":  return " text/xml";
            case ".vxml":  return " text/xml";
            case ".wav":  return " audio/wav";
            case ".wax":  return " audio/x-ms-wax";
            case ".wbmp":  return " image/vnd.wap.wbmp";
            case ".wm":  return " video/x-ms-wm";
            case ".wma":  return " audio/x-ms-wma";
            case ".wml":  return " text/vnd.wap.wml";
            case ".wmv":  return " video/x-ms-wmv";
            case ".wmx":  return " video/x-ms-wmx";
            case ".wsc":  return " text/scriptlet";
            case ".wsdl":  return " text/xml";
            case ".wvx":  return " video/x-ms-wvx";
            case ".xdr":  return " text/xml";
            case ".xq":  return " text/xml";
            case ".xql":  return " text/xml";
            case ".xquery":  return " text/xml";
            case ".xsd":  return " text/xml";
            case ".xsl":  return " text/xml";
            case ".xslt":  return " text/xml";
            default: return "image/jpeg";
        }
    }

}
发布了111 篇原创文章 · 获赞 28 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42697074/article/details/103567929