|
@@ -1,15 +1,13 @@
|
|
|
-package com.sckw.file.utils;
|
|
|
|
|
|
|
+package com.sckw.core.utils;
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateTime;
|
|
import cn.hutool.core.date.DateTime;
|
|
|
import com.aliyun.oss.*;
|
|
import com.aliyun.oss.*;
|
|
|
import com.aliyun.oss.model.*;
|
|
import com.aliyun.oss.model.*;
|
|
|
-import com.sckw.core.utils.IdWorker;
|
|
|
|
|
-import com.sckw.core.utils.PasswordUtils;
|
|
|
|
|
-import com.sckw.core.utils.StringUtils;
|
|
|
|
|
-import com.sckw.excel.common.NumberConstant;
|
|
|
|
|
-import com.sckw.excel.common.StringConstant;
|
|
|
|
|
-import com.sckw.file.common.enums.AliyunOssFileTypeEnum;
|
|
|
|
|
-import com.sckw.file.common.enums.FileEnum;
|
|
|
|
|
|
|
+import com.sckw.core.common.enums.NumberConstant;
|
|
|
|
|
+import com.sckw.core.common.enums.StringConstant;
|
|
|
|
|
+import com.sckw.core.common.enums.enums.AliyunOssFileTypeEnum;
|
|
|
|
|
+import com.sckw.core.common.enums.enums.FileEnum;
|
|
|
|
|
+import com.sckw.core.model.file.FileInfo;
|
|
|
import jakarta.annotation.PostConstruct;
|
|
import jakarta.annotation.PostConstruct;
|
|
|
import jakarta.servlet.http.HttpServletResponse;
|
|
import jakarta.servlet.http.HttpServletResponse;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -70,6 +68,16 @@ public class FileUtils {
|
|
|
@Value("${aliyun.oss.bucket}")
|
|
@Value("${aliyun.oss.bucket}")
|
|
|
public String oss_bucketName;
|
|
public String oss_bucketName;
|
|
|
|
|
|
|
|
|
|
+ public static FileInfo getFileDataList(MultipartFile file) {
|
|
|
|
|
+ FileInfo fileInfo =new FileInfo();
|
|
|
|
|
+ String oFileName = file.getOriginalFilename();
|
|
|
|
|
+ BigDecimal fileSize = FileUtils.getFileSize(file, StringConstant.KB);
|
|
|
|
|
+ fileInfo.setFileSize(fileSize);
|
|
|
|
|
+ fileInfo.setFileOriginalName(oFileName);
|
|
|
|
|
+ fileInfo.setFileSuffix(FilenameUtils.getExtension(oFileName));
|
|
|
|
|
+ return fileInfo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@PostConstruct
|
|
@PostConstruct
|
|
|
public void setEndpoint() {
|
|
public void setEndpoint() {
|
|
|
endpoint = this.oss_endpoint;
|
|
endpoint = this.oss_endpoint;
|
|
@@ -92,6 +100,7 @@ public class FileUtils {
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 获取oss 地址前缀
|
|
* 获取oss 地址前缀
|
|
|
|
|
+ *
|
|
|
* @return
|
|
* @return
|
|
|
*/
|
|
*/
|
|
|
public static String getOSSAddressPrefix() {
|
|
public static String getOSSAddressPrefix() {
|
|
@@ -112,7 +121,8 @@ public class FileUtils {
|
|
|
* @return
|
|
* @return
|
|
|
*/
|
|
*/
|
|
|
public static String getFileSuffix(String fileName) {
|
|
public static String getFileSuffix(String fileName) {
|
|
|
- return fileName.substring(fileName.lastIndexOf("."));//例如:abc.png 截取后:.png
|
|
|
|
|
|
|
+ //例如:abc.png 截取后:.png
|
|
|
|
|
+ return fileName.substring(fileName.lastIndexOf("."));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -124,7 +134,7 @@ public class FileUtils {
|
|
|
* @return
|
|
* @return
|
|
|
*/
|
|
*/
|
|
|
public static Map<String, String> uploadFileByInfo(MultipartFile file, FileEnum fileEnum) {
|
|
public static Map<String, String> uploadFileByInfo(MultipartFile file, FileEnum fileEnum) {
|
|
|
- Map<String, String> infoMap = new HashMap<>();
|
|
|
|
|
|
|
+ Map<String, String> infoMap = new HashMap<>(NumberConstant.SIXTEEN);
|
|
|
//创建OSSClient实例
|
|
//创建OSSClient实例
|
|
|
defalutOSS();
|
|
defalutOSS();
|
|
|
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
|
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
|
@@ -147,21 +157,27 @@ public class FileUtils {
|
|
|
infoMap.put("fileMd5", fileName);
|
|
infoMap.put("fileMd5", fileName);
|
|
|
infoMap.put("fileName", fileName + fileSuffix);
|
|
infoMap.put("fileName", fileName + fileSuffix);
|
|
|
//按照当前日期,创建文件夹,上传到创建文件夹里面
|
|
//按照当前日期,创建文件夹,上传到创建文件夹里面
|
|
|
- //2021/02/02/01.jpg
|
|
|
|
|
String timeUrl = new DateTime().toString("yyyyMMdd");
|
|
String timeUrl = new DateTime().toString("yyyyMMdd");
|
|
|
fileName = timeUrl + "/" + fileName;
|
|
fileName = timeUrl + "/" + fileName;
|
|
|
String filePath = BASE_DIR + fileName + fileSuffix;
|
|
String filePath = BASE_DIR + fileName + fileSuffix;
|
|
|
//调用方法实现上传
|
|
//调用方法实现上传
|
|
|
ossClient.putObject(bucketName, filePath, inputStream);
|
|
ossClient.putObject(bucketName, filePath, inputStream);
|
|
|
- //上传后的文件地址
|
|
|
|
|
-// String url1 = getUrl(ossClient, bucketName, filePath);
|
|
|
|
|
|
|
+ //获取上传后的文件地址
|
|
|
|
|
+ //String url1 = getUrl(ossClient, bucketName, filePath);
|
|
|
//关闭OSSClient。
|
|
//关闭OSSClient。
|
|
|
ossClient.shutdown();
|
|
ossClient.shutdown();
|
|
|
//上传之后文件路径
|
|
//上传之后文件路径
|
|
|
- //https://yygh-atguigu.oss-cn-beijing.aliyuncs.com/01.jpg
|
|
|
|
|
-// String url = "https://" + bucketName + "." + endpoint + "/" + filePath;
|
|
|
|
|
|
|
+ //String url = "https://" + bucketName + "." + endpoint + "/" + filePath;
|
|
|
//绝对路径 "https://kaiwu-saas.oss-cn-chengdu.aliyuncs.com/+ filePath;"
|
|
//绝对路径 "https://kaiwu-saas.oss-cn-chengdu.aliyuncs.com/+ filePath;"
|
|
|
-// String url = StringConstant.HTTPS_STRING+StringConstant.COLON+StringConstant.LEFT_SEPARATORS + bucketName + StringConstant.POINT + endpoint + StringConstant.LEFT_SEPARATOR+ filePath;
|
|
|
|
|
|
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
|
|
+ stringBuilder.append(StringConstant.HTTPS_STRING)
|
|
|
|
|
+ .append(StringConstant.COLON)
|
|
|
|
|
+ .append(StringConstant.LEFT_SEPARATORS)
|
|
|
|
|
+ .append(bucketName)
|
|
|
|
|
+ .append(StringConstant.POINT)
|
|
|
|
|
+ .append(endpoint)
|
|
|
|
|
+ .append(StringConstant.LEFT_SEPARATOR);
|
|
|
|
|
+// String url = stringBuilder.append(filePath).toString();
|
|
|
//相对路径
|
|
//相对路径
|
|
|
String url = filePath;
|
|
String url = filePath;
|
|
|
//返回 上传文件地址
|
|
//返回 上传文件地址
|
|
@@ -236,6 +252,135 @@ public class FileUtils {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 文件上传
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param inputStream 文件流
|
|
|
|
|
+ * @param originalFilename 文件原名称
|
|
|
|
|
+ * @param fileEnum 上传文件类型/地址枚举
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ public static Map<String, String> uploadFileByInfo(InputStream inputStream, String originalFilename, FileEnum fileEnum) {
|
|
|
|
|
+ Map<String, String> infoMap = new HashMap<>(NumberConstant.SIXTEEN);
|
|
|
|
|
+ //创建OSSClient实例
|
|
|
|
|
+ defalutOSS();
|
|
|
|
|
+ OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
|
|
|
|
+ try {
|
|
|
|
|
+ //容器不存在,就创建
|
|
|
|
|
+ if (!ossClient.doesBucketExist(bucketName)) {
|
|
|
|
|
+ ossClient.createBucket(bucketName);
|
|
|
|
|
+ CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
|
|
|
|
|
+ createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
|
|
|
|
|
+ ossClient.createBucket(createBucketRequest);
|
|
|
|
|
+ }
|
|
|
|
|
+ //上传文件流
|
|
|
|
|
+ String fileName = FilenameUtils.getBaseName(originalFilename);
|
|
|
|
|
+ //生成随机唯一值,使用uuid,添加到文件名称里面 改成使用加密
|
|
|
|
|
+// fileName = PasswordUtils.md5(fileName);
|
|
|
|
|
+ fileName = PasswordUtils.md5(fileName);
|
|
|
|
|
+ String fileSuffix = FileUtils.getFileSuffix(originalFilename);
|
|
|
|
|
+ //不带后缀
|
|
|
|
|
+ infoMap.put("fileMd5", fileName);
|
|
|
|
|
+ infoMap.put("fileName", fileName + fileSuffix);
|
|
|
|
|
+ //按照当前日期,创建文件夹,上传到创建文件夹里面
|
|
|
|
|
+ //2021/02/02/01.jpg
|
|
|
|
|
+ String timeUrl = new DateTime().toString("yyyyMMdd");
|
|
|
|
|
+ fileName = timeUrl + "/" + fileName;
|
|
|
|
|
+ String filePath = BASE_DIR + fileName + fileSuffix;
|
|
|
|
|
+ //调用方法实现上传
|
|
|
|
|
+ ossClient.putObject(bucketName, filePath, inputStream);
|
|
|
|
|
+ //上传后的文件地址
|
|
|
|
|
+// String url1 = getUrl(ossClient, bucketName, filePath);
|
|
|
|
|
+ //关闭OSSClient。
|
|
|
|
|
+ ossClient.shutdown();
|
|
|
|
|
+ //上传之后文件路径
|
|
|
|
|
+// String url = "https://" + bucketName + "." + endpoint + "/" + filePath;
|
|
|
|
|
+ //绝对路径 "https://kaiwu-saas.oss-cn-chengdu.aliyuncs.com/+ filePath;"
|
|
|
|
|
+// String url = StringConstant.HTTPS_STRING+StringConstant.COLON+StringConstant.LEFT_SEPARATORS + bucketName + StringConstant.POINT + endpoint + StringConstant.LEFT_SEPARATOR+ filePath;
|
|
|
|
|
+ //相对路径
|
|
|
|
|
+ String url = filePath;
|
|
|
|
|
+ //返回 上传文件地址
|
|
|
|
|
+ infoMap.put("filePath", url);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ infoMap.put("filePath", null);
|
|
|
|
|
+ //关闭OSSClient。
|
|
|
|
|
+ ossClient.shutdown();
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ log.error("oss-upload-file-error:{}", e.getMessage(), e);
|
|
|
|
|
+ throw new RuntimeException("oss-upload-file-error:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ return infoMap;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 文件上传
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param file 文件流
|
|
|
|
|
+ * @param fileInfo 文件对象
|
|
|
|
|
+ * @param fileEnum 文件枚举-暂时不使用
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ public static FileInfo uploadFileInfo(MultipartFile file, FileInfo fileInfo, FileEnum fileEnum) {
|
|
|
|
|
+ //创建OSSClient实例
|
|
|
|
|
+ defalutOSS();
|
|
|
|
|
+ OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
|
|
|
|
+ try {
|
|
|
|
|
+ //容器不存在,就创建
|
|
|
|
|
+ if (!ossClient.doesBucketExist(bucketName)) {
|
|
|
|
|
+ ossClient.createBucket(bucketName);
|
|
|
|
|
+ CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
|
|
|
|
|
+ createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
|
|
|
|
|
+ ossClient.createBucket(createBucketRequest);
|
|
|
|
|
+ }
|
|
|
|
|
+ //上传文件流
|
|
|
|
|
+ InputStream inputStream = file.getInputStream();
|
|
|
|
|
+ String fileName = FilenameUtils.getBaseName(file.getOriginalFilename());
|
|
|
|
|
+ //生成随机唯一值,使用uuid,添加到文件名称里面 改成使用加密
|
|
|
|
|
+ //fileName = PasswordUtils.md5(fileName);
|
|
|
|
|
+ fileName = PasswordUtils.md5(fileName);
|
|
|
|
|
+ String fileSuffix = FileUtils.getFileSuffix(file.getOriginalFilename());
|
|
|
|
|
+ //不带后缀
|
|
|
|
|
+ fileInfo.setFileMd5(fileName);
|
|
|
|
|
+ fileInfo.setFileName(fileName + fileSuffix);
|
|
|
|
|
+ //按照当前日期,创建文件夹,上传到创建文件夹里面
|
|
|
|
|
+ String timeUrl = new DateTime().toString(StringConstant.DATE_YYYYMMDD);
|
|
|
|
|
+ fileName = timeUrl + StringConstant.LEFT_SEPARATOR + fileName;
|
|
|
|
|
+ String filePath = BASE_DIR + fileName + fileSuffix;
|
|
|
|
|
+ //调用方法实现上传
|
|
|
|
|
+ ossClient.putObject(bucketName, filePath, inputStream);
|
|
|
|
|
+ //获取上传后的文件地址
|
|
|
|
|
+ //String url1 = getUrl(ossClient, bucketName, filePath);
|
|
|
|
|
+ //关闭OSSClient。
|
|
|
|
|
+ ossClient.shutdown();
|
|
|
|
|
+ //上传之后文件路径
|
|
|
|
|
+ //String url = "https://" + bucketName + "." + endpoint + "/" + filePath;
|
|
|
|
|
+ //绝对路径 "https://kaiwu-saas.oss-cn-chengdu.aliyuncs.com/+ filePath;"
|
|
|
|
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
|
|
+ stringBuilder.append(StringConstant.HTTPS_STRING)
|
|
|
|
|
+ .append(StringConstant.COLON)
|
|
|
|
|
+ .append(StringConstant.LEFT_SEPARATORS)
|
|
|
|
|
+ .append(bucketName)
|
|
|
|
|
+ .append(StringConstant.POINT)
|
|
|
|
|
+ .append(endpoint)
|
|
|
|
|
+ .append(StringConstant.LEFT_SEPARATOR);
|
|
|
|
|
+ String fileAbsolutePath = stringBuilder.append(filePath).toString();
|
|
|
|
|
+ fileInfo.setFileAbsolutePath(fileAbsolutePath);
|
|
|
|
|
+ //相对路径
|
|
|
|
|
+ String url = filePath;
|
|
|
|
|
+ //返回 上传文件地址
|
|
|
|
|
+ fileInfo.setFilePath(url);
|
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
|
+ fileInfo.setFilePath(null);
|
|
|
|
|
+ //关闭OSSClient。
|
|
|
|
|
+ ossClient.shutdown();
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ log.error("oss-upload-file-error:{}", e.getMessage(), e);
|
|
|
|
|
+ throw new RuntimeException("oss-upload-file-error:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ return fileInfo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private static void defalutOSS() {
|
|
private static void defalutOSS() {
|
|
|
if (StringUtils.isBlank(endpoint)) {
|
|
if (StringUtils.isBlank(endpoint)) {
|
|
|
endpoint = DEFAULT_ENDPOINT;
|
|
endpoint = DEFAULT_ENDPOINT;
|
|
@@ -277,12 +422,15 @@ public class FileUtils {
|
|
|
/**
|
|
/**
|
|
|
* 获取文件上传大小
|
|
* 获取文件上传大小
|
|
|
*
|
|
*
|
|
|
- * @param file
|
|
|
|
|
|
|
+ * @param file 当前默认使用 kb
|
|
|
* @return
|
|
* @return
|
|
|
*/
|
|
*/
|
|
|
public static BigDecimal getFileSize(MultipartFile file, String type) {
|
|
public static BigDecimal getFileSize(MultipartFile file, String type) {
|
|
|
long size = file.getSize();
|
|
long size = file.getSize();
|
|
|
BigDecimal bigDecimal = new BigDecimal(NumberConstant.ZERO);
|
|
BigDecimal bigDecimal = new BigDecimal(NumberConstant.ZERO);
|
|
|
|
|
+ if (StringUtils.isBlank(type)){
|
|
|
|
|
+ type=StringConstant.KB;
|
|
|
|
|
+ }
|
|
|
switch (type) {
|
|
switch (type) {
|
|
|
case "B":
|
|
case "B":
|
|
|
bigDecimal = new BigDecimal((double) size);
|
|
bigDecimal = new BigDecimal((double) size);
|
|
@@ -299,6 +447,7 @@ public class FileUtils {
|
|
|
default:
|
|
default:
|
|
|
throw new RuntimeException("file size error");
|
|
throw new RuntimeException("file size error");
|
|
|
}
|
|
}
|
|
|
|
|
+ bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP);
|
|
|
return bigDecimal;
|
|
return bigDecimal;
|
|
|
}
|
|
}
|
|
|
|
|
|