All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hn.upload.FileUploadUtil Maven / Gradle / Ivy

There is a newer version: 1.0.18
Show newest version
package com.hn.upload;

import cn.hutool.core.util.StrUtil;
import com.hn.utils.AssertUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * 描述: 文件上传
 *
 * @author fei
 * 2019-12-20 09:02
 */
public class FileUploadUtil {

    // -----------------------------------默认场景的------------------------------------------------------------

    /**
     * 获取文件访问根地址
     *
     * @param platform 上传平台
     * @return 文件访问根地址
     */
    public static String getFileBaseUrl(UploadPlatform platform) {
        return getFileBaseUrlByScene(platform, null);
    }

    /**
     *  获取文件临时下载地址
     * @param platform  上传平台
     * @param key 文件key(路径)
     * @param expireTime 过期时间 以分为单位
     * @return 下载地址
     */
    public static String getTempDownUrl(UploadPlatform platform,String key,Integer expireTime){
        return getTempDownUrlByScene(platform, null,key,expireTime);
    }

    /**
     * 获取上传token
     *
     * @param platform 上传平台
     * @return 上传token
     */
    public static Object getToken(UploadPlatform platform) {
        return getToken(platform, null);
    }

    /**
     * 获取上传token
     *
     * @param platform 上传平台
     * @param key  [阿里云、腾讯云] 传文件夹目录 ; [minio]传key
     * @return 上传token
     */
    public static Object getToken(UploadPlatform platform, String key) {
        return getFileUpload(platform, null).getToken(key);
    }

    /**
     * 文件上传
     *
     * @param platform   上传平台
     * @param file       {@link MultipartFile}
     * @param objectName 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
     * @return objectName
     */
    public static String uploadFile(UploadPlatform platform, MultipartFile file, String objectName) {
        return uploadFileByScene(platform, null, file, objectName);
    }

    /**
     * 文件上传
     *
     * @param platform   上传平台
     * @param file       {@link File}
     * @param objectName 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
     * @return objectName
     */
    public static String uploadFile(UploadPlatform platform, File file, String objectName) {
        return uploadFileByScene(platform, null, file, objectName);
    }

    /**
     * 文件上传
     *
     * @param platform   上传平台
     * @param file       {@link File}
     * @return objectName
     */
    public static String uploadFile(UploadPlatform platform, File file) {
        return uploadFileByScene(platform, null, file);
    }

    /**
     * 文件上传
     *
     * @param platform   上传平台
     * @param inputStream {@link InputStream}
     * @param objectName 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
     * @return objectName
     */
    public static String uploadFile(UploadPlatform platform, InputStream inputStream, String objectName) {
        return uploadFileByScene(platform, null, inputStream, objectName);
    }

    /**
     * 文件上传
     *
     * @param platform   上传平台
     * @param filePath   文件路径
     * @param objectName 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
     * @return objectName
     */
    public static String uploadFile(UploadPlatform platform, String filePath, String objectName) {
        return uploadFileByScene(platform, null, filePath, objectName);
    }

    /**
     *  删除文件
     * @param platform   上传平台
     * @param key 文件key(路径)
     */
    public static void deleteFile(UploadPlatform platform,String key){
        deleteFileByScene(platform, null, key);
    }

    // -------------------------------------带场景的-----------------------------------------------------------

    /**
     * 获取文件访问根地址
     *
     * @param platform 上传平台
     * @param scene    场景
     * @return 文件访问根地址
     */
    public static String getFileBaseUrlByScene(UploadPlatform platform, String scene) {
        return getFileUpload(platform, scene).getFileBaseUrl();
    }

    /**
     *  获取文件临时下载地址
     * @param platform 上传平台
     * @param scene    场景
     * @param key 文件key(路径)
     * @param expireTime 过期时间 以分为单位
     * @return 下载地址
     */
    public static String getTempDownUrlByScene(UploadPlatform platform, String scene, String key,Integer expireTime){
        return getFileUpload(platform, scene).getTempDownUrl(key,expireTime);
    }

    /**
     * 获取上传token
     *
     * @param platform 上传平台
     * @param scene    场景
     * @return 上传token
     */
    public static Object getTokenByScene(UploadPlatform platform, String scene) {
        return getFileUpload(platform, scene).getToken();
    }



    /**
     * 获取上传token
     *
     * @param platform 上传平台
     * @param scene    场景
     * @return 上传token
     */
    public static Object getTokenByScene(UploadPlatform platform, String scene,String dir) {
        return getFileUpload(platform, scene).getToken(dir);
    }

    /**
     * 文件上传
     * @param platform   上传平台
     * @param scene    场景
     * @param file       {@link MultipartFile}
     * @param objectName 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
     * @return objectName
     */
    public static String uploadFileByScene(UploadPlatform platform, String scene, MultipartFile file, String objectName) {
        return getFileUpload(platform, scene).uploadFile(file, objectName);
    }

    /**
     * 文件上传
     *
     * @param platform   上传平台
     * @param scene 场景
     * @param inputStream {@link InputStream}
     * @param objectName 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
     * @return objectName
     */
    public static String uploadFileByScene(UploadPlatform platform,String scene,InputStream inputStream, String objectName) {
        return getFileUpload(platform,scene).uploadFile(inputStream, objectName);
    }

    /**
     * 文件上传
     *
     * @param platform   上传平台
     * @param scene    场景
     * @param file       {@link File}
     * @param objectName 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
     * @return objectName
     */
    public static String uploadFileByScene(UploadPlatform platform, String scene, File file, String objectName) {
        return getFileUpload(platform, scene).uploadFile(file, objectName);
    }

    /**
     * 文件上传
     *
     * @param platform   上传平台
     * @param scene    场景
     * @param file       {@link File}
     * @return objectName
     */
    public static String uploadFileByScene(UploadPlatform platform, String scene, File file) {
        return getFileUpload(platform, scene).uploadFile(file);
    }

    /**
     * 文件上传
     *
     * @param platform   上传平台
     * @param scene    场景
     * @param filePath   文件路径
     * @param objectName 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
     * @return objectName
     */
    public static String uploadFileByScene(UploadPlatform platform, String scene, String filePath, String objectName) {
        return getFileUpload(platform, scene).uploadFile(filePath, objectName);
    }

    /**
     *  删除文件
     * @param platform   上传平台
     * @param scene 场景
     * @param key 文件key(路径)
     */
    public static void deleteFileByScene(UploadPlatform platform,String scene,String key){
        getFileUpload(platform, scene).deleteFile(key);
    }

    private FileUploadUtil() {}
    private static Map fileUploadMap = new HashMap<>();

    /**
     *  获取 FileUpload
     * @param platform 上传平台
     * @return FileUpload
     */
    public static FileUpload getFileUpload(UploadPlatform platform) {
        return getFileUpload(platform,"");
    }

    /**
     *  获取 FileUpload
     * @param platform 上传平台
     * @param scene 场景
     * @return FileUpload
     */
    public static FileUpload getFileUpload(UploadPlatform platform, String scene) {
        String key = platform.name();
        if (StrUtil.isNotBlank(scene)) {
            key = key.concat(":").concat(scene);
        }
        FileUpload fileUpload = fileUploadMap.get(key);
        if (fileUpload == null) {
            fileUpload = platform.create(scene);
            AssertUtils.notNull(fileUpload, "暂不支持此平台");
            fileUploadMap.put(key, fileUpload);
        }
        return fileUpload;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy