com.hn.upload.FileUploadUtil Maven / Gradle / Ivy
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