案例管理,添加修改暂停优化,判断时间不能重叠

This commit is contained in:
xiezhijun
2021-03-04 18:35:06 +08:00
parent f70b85a2ed
commit 2a7c499b24
18 changed files with 1005 additions and 10 deletions

View File

@ -0,0 +1,43 @@
package com.stdiet.common.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class AliyunOSSConfig {
public static String AccessKeyID;
public static String AccessKeySecret;
public static String Buckets;
public static String EndPoint;
public static String casePrefix;
@Value("${aliyun.oss.AccessKeyID}")
public void setAccessKeyID(String AccessKeyID){
AliyunOSSConfig.AccessKeyID = AccessKeyID;
}
@Value("${aliyun.oss.AccessKeySecret}")
public void setAccessKeySecret(String AccessKeySecret){
AliyunOSSConfig.AccessKeySecret = AccessKeySecret;
}
@Value("${aliyun.oss.Buckets}")
public void setBuckets(String Buckets){
AliyunOSSConfig.Buckets = Buckets;
}
@Value("${aliyun.oss.EndPoint}")
public void setEndPoint(String EndPoint){
AliyunOSSConfig.EndPoint = EndPoint;
}
@Value("${aliyun.oss.casePrefix}")
public void setCasePrefix(String casePrefix){
AliyunOSSConfig.casePrefix = casePrefix;
}
}

View File

@ -0,0 +1,293 @@
package com.stdiet.common.utils.oss;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObject;
import com.stdiet.common.config.AliyunOSSConfig;
import org.springframework.web.multipart.MultipartFile;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
public class AliyunOSSUtils {
// 创建OSSClient实例
private static OSS ossClient = null;
public static OSS getOssClient() {
if (ossClient == null) {
synchronized (OSS.class) {
if (ossClient == null) {
ossClient = new OSSClientBuilder().build(AliyunOSSConfig.EndPoint, AliyunOSSConfig.AccessKeyID, AliyunOSSConfig.AccessKeySecret);
}
}
}
return ossClient;
}
/**
* 获取图片的URL头信息
*
* @return 返回url头信息
*/
private static String getURLHead() {
//从哪个位置截取
int cutPoint = AliyunOSSConfig.EndPoint.lastIndexOf('/') + 1;
//http头
String head = AliyunOSSConfig.EndPoint.substring(0, cutPoint);
//服务器地址信息
String tail = AliyunOSSConfig.EndPoint.substring(cutPoint);
//返回结果
return head + AliyunOSSConfig.Buckets + "." + tail + "/";
}
/**
* 获取存储在服务器上的地址
*
* @param oranName 文件名
* @return 文件URL
*/
private static String getRealName(String oranName) {
return getURLHead() + oranName;
}
/**
* 获取一个随机的文件名
*
* @param oranName 初始的文件名
* @return 返回加uuid后的文件名
*/
private static String getRandomImageName(String prefix, String oranName) {
//获取一个uuid 去掉-
String uuid = UUID.randomUUID().toString().replace("-", "");
//查一下是否带路径
int cutPoint = oranName.lastIndexOf("/") + 1;
//如果存在路径
if (cutPoint != 0) {
//掐头 如果开头是/ 则去掉
String head = oranName.indexOf("/") == 0 ? oranName.substring(1, cutPoint) : oranName.substring(0, cutPoint);
//去尾
String tail = oranName.substring(cutPoint);
//返回正确的带路径的图片名称
return prefix + head + uuid + tail;
}
//不存在 直接返回
return prefix + uuid + oranName;
}
/**
* MultipartFile2File
* @param multipartFile
* @return
*/
private static File transferToFile(MultipartFile multipartFile) {
//选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。
File file = null;
try {
//获取文件名
String originalFilename = multipartFile.getOriginalFilename();
//获取最后一个"."的位置
int cutPoint = originalFilename.lastIndexOf(".");
//获取文件名
String prefix = originalFilename.substring(0,cutPoint);
//获取后缀名
String suffix = originalFilename.substring(cutPoint + 1);
//创建临时文件
file = File.createTempFile(prefix, suffix);
//multipartFile2file
multipartFile.transferTo(file);
//删除临时文件
file.deleteOnExit();
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
/**
* 通过文件URL反向解析文件名
*
* @param fileURL 文件URL
* @return 原文件名
*/
private static String getObjectName(String fileURL) {
return fileURL.substring(getURLHead().length());
}
/**
* 上传文件流
* @param prefix 路径的前缀路径目录
* @param oranFileName 上传到服务器上的文件路径和名称
* @param file 来自本地的文件或者文件流
*/
public static String uploadFileInputSteam(String prefix, String oranFileName, MultipartFile file) {
// <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径例如abc/efg/123.jpg
String objectName = getRandomImageName(prefix, oranFileName);
// 创建OSSClient实例。
OSS ossClient = getOssClient();
// 上传文件流
try (InputStream inputStream = new FileInputStream(transferToFile(file))) {
//上传到OSS
ossClient.putObject(AliyunOSSConfig.Buckets, objectName, inputStream);
} catch (Exception ex) {
ex.printStackTrace();
}
// 关闭OSSClient。
ossClient.shutdown();
//返回文件在服务器上的全路径+名称
return getRealName(objectName);
}
/**
* 上传文件流
* @param prefix 路径的前缀路径目录
* @param oranFileName 上传到服务器上的文件路径和名称
* @param file 来自本地的文件或者文件流
*/
public static String uploadFileInputSteam(String prefix, String oranFileName, File file) {
// <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径例如abc/efg/123.jpg
String objectName = getRandomImageName(prefix, oranFileName);
// 创建OSSClient实例。
OSS ossClient = getOssClient();
// 上传文件流。
try (InputStream inputStream = new FileInputStream(file);) {
//上传到OSS
ossClient.putObject(AliyunOSSConfig.Buckets, objectName, inputStream);
} catch (Exception ex) {
ex.printStackTrace();
}
// 关闭OSSClient。
ossClient.shutdown();
//返回文件在服务器上的全路径+名称
return getRealName(objectName);
}
/**
* 从OSS中下载一个文件
*
* @param fileURL 文件的url
* @param localFileName 下载到本地的文件名称
*/
public static void downloadFileToLoacal(String fileURL, String localFileName) {
//将url解析成objectName
String objectName = getObjectName(fileURL);
// 创建OSSClient实例。
OSS ossClient = getOssClient();
// 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖不存在则新建。
ossClient.getObject(new GetObjectRequest(AliyunOSSConfig.Buckets, objectName), new File(localFileName));
// 关闭OSSClient。
ossClient.shutdown();
}
/**
* 从OSS中下载一个文件流
*
* @param fileURL 文件的url
*/
public InputStream downloadFile(String fileURL) throws IOException {
//将url解析成objectName
String objectName = getObjectName(fileURL);
// 创建OSSClient实例。
OSS ossClient = getOssClient();
OSSObject ossObject = ossClient.getObject(AliyunOSSConfig.Buckets, objectName);
//获取流
InputStream streamData = ossObject.getObjectContent();
// 关闭OSSClient。
ossClient.shutdown();
return streamData;
}
/**
* 删除指定路径下的一个文件
*
* @param fileURL 文件的全称
*/
public static void deleteFile(String fileURL) {
// 反向解析文件名
String objectName = getObjectName(fileURL);
// 创建OSSClient实例。
OSS ossClient = getOssClient();
// 删除文件。如需删除文件夹请将ObjectName设置为对应的文件夹名称。如果文件夹非空则需要将文件夹下的所有object删除后才能删除该文件夹。
ossClient.deleteObject(AliyunOSSConfig.Buckets, objectName);
//删除成功 打印文件存储地址
printDeleteSuccessInfo(fileURL);
// 关闭OSSClient。
ossClient.shutdown();
}
/**
* 打印文件的存储地址
*
* @param fileURL 文件URL
*/
private static void printUploadSuccessInfo(String fileURL) {
//上传成功
System.out.println("upload success path = " + getRealName(fileURL));
}
/**
* 打印文件的存储地址
*
* @param fileURL 文件URL
*/
private static void printDeleteSuccessInfo(String fileURL) {
//上传成功
System.out.println("delete success path = " + getRealName(fileURL));
}
/**
* 通过文件的URL 判断文件是否存在
*
* @param fileURL 文件的URL
* @return 文件是否存在
*/
public static boolean exists(String fileURL) {
// 反向解析文件名
String objectName = getObjectName(fileURL);
// 创建OSSClient实例。
OSS ossClient = getOssClient();
// 判断文件是否存在。doesObjectExist还有一个参数isOnlyInOSS如果为true则忽略302重定向或镜像如果为false则考虑302重定向或镜像。
boolean found = ossClient.doesObjectExist(AliyunOSSConfig.Buckets, objectName);
// 关闭OSSClient。
ossClient.shutdown();
// 返回是否存在
return found;
}
}