diff --git a/cloud-rule-engine/src/main/java/com/muyu/upload/ALiYunUpload.java b/cloud-rule-engine/src/main/java/com/muyu/upload/ALiYunUpload.java index 7739d52..253afda 100644 --- a/cloud-rule-engine/src/main/java/com/muyu/upload/ALiYunUpload.java +++ b/cloud-rule-engine/src/main/java/com/muyu/upload/ALiYunUpload.java @@ -26,11 +26,11 @@ import java.nio.charset.StandardCharsets; public class ALiYunUpload { // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写 - private static final String endpoint = "https://oss-cn-shanghai.aliyuncs.com" ; + private static final String endpoint = "oss-cn-shanghai.aliyuncs.com" ; // AccessKeyID private static final String accessKeyId = "LTAI5tHKdDATVKeBjFH8mb8D" ; // AccessKeySecret - private static final String accessKeySecret = "5ejb4gdgukfD1FdM181kdeAkSuURo7" ; + private static final String accessKeySecret = "5ejb4qdgukfD1FdM181kdeAkSuURo7" ; // Bucket名称 private static final String bucketName = "java-web-generating-class" ; @@ -45,7 +45,7 @@ public class ALiYunUpload { OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 上传到OSS后文件保存的目录,例如:folder/subfolder/,最后以斜杠结尾 - String objectName = "build/rule/version/"+fileName+".java"; + String objectName = "build/rule/"+fileName+".java"; try { // 将内容转换为字节数组输入流 diff --git a/cloud-rule-engine/src/main/java/com/muyu/upload/OssUtil.java b/cloud-rule-engine/src/main/java/com/muyu/upload/OssUtil.java new file mode 100644 index 0000000..e2b631f --- /dev/null +++ b/cloud-rule-engine/src/main/java/com/muyu/upload/OssUtil.java @@ -0,0 +1,162 @@ +package com.muyu.upload; + +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.model.GetObjectRequest; +import com.aliyun.oss.model.PutObjectRequest; +import lombok.extern.log4j.Log4j2; +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; +import java.time.LocalDateTime; +import java.util.UUID; + +/** + * Oss服务调用 + */ +@Log4j2 +public class OssUtil { + + /** + * Endpoint 存储对象概述 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限 访问路径前缀 存储对象概述 + */ + private static String endPoint = "oss-cn-shanghai.aliyuncs.com"; + private static String accessKeyId = "LTAI5tHKdDATVKeBjFH8mb8D"; + private static String accessKeySecret = "5ejb4qdgukfD1FdM181kdeAkSuURo7"; + private static String accessPre = "https://mall-bw.oss-cn-shanghai.aliyuncs.com/"; + + /** + * bucket名称 + * + * @return + */ + private static String bucketName = "mall-bw"; + + private static OSS ossClient; + + static { + ossClient = new OSSClientBuilder().build( + endPoint, + accessKeyId, + accessKeySecret); + log.info("oss服务连接成功!"); + } + + /** + * 默认路径上传本地文件 + * + * @param filePath + */ + public static String uploadFile(String filePath) { + return uploadFileForBucket(bucketName, getOssFilePath(filePath), filePath); + } + + /** + * 默认路径上传multipartFile文件 + * + * @param multipartFile + */ + public static String uploadMultipartFile(MultipartFile multipartFile) { + return uploadMultipartFile(bucketName, getOssFilePath(multipartFile.getOriginalFilename()), multipartFile); + } + + /** + * 上传 multipartFile 类型文件 + * + * @param bucketName + * @param ossPath + * @param multipartFile + */ + public static String uploadMultipartFile(String bucketName, String ossPath, MultipartFile multipartFile) { + InputStream inputStream = null; + try { + inputStream = multipartFile.getInputStream(); + } catch (IOException e) { + e.printStackTrace(); + } + uploadFileInputStreamForBucket(bucketName, ossPath, inputStream); + return accessPre + ossPath; + } + + /** + * 使用File上传PutObject上传文件 ** 程序默认使用次方法上传 + * + * @param bucketName 实例名称 + * @param ossPath oss存储路径 + * @param filePath 本地文件路径 + */ + public static String uploadFileForBucket(String bucketName, String ossPath, String filePath) { + // 创建PutObjectRequest对象。 + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, ossPath, new File(filePath)); + + // 上传 + ossClient.putObject(putObjectRequest); + return accessPre + ossPath; + } + + /** + * 使用文件流上传到指定的bucket实例 + * + * @param bucketName 实例名称 + * @param ossPath oss存储路径 + * @param filePath 本地文件路径 + */ + public static String uploadFileInputStreamForBucket(String bucketName, String ossPath, String filePath) { + + // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 + InputStream inputStream = null; + try { + inputStream = new FileInputStream(filePath); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。 + uploadFileInputStreamForBucket(bucketName, ossPath, inputStream); + return accessPre + ossPath; + } + + public static void uploadFileInputStreamForBucket(String bucketName, String ossPath, InputStream inputStream) { + ossClient.putObject(bucketName, ossPath, inputStream); + } + + /** + * 下载 + * + * @param ossFilePath + * @param filePath + */ + public static void downloadFile(String ossFilePath, String filePath) { + downloadFileForBucket(bucketName, ossFilePath, filePath); + } + + /** + * 下载 + * + * @param bucketName 实例名称 + * @param ossFilePath oss存储路径 + * @param filePath 本地文件路径 + */ + public static void downloadFileForBucket(String bucketName, String ossFilePath, String filePath) { + ossClient.getObject(new GetObjectRequest(bucketName, ossFilePath), new File(filePath)); + } + + /** + * @return + */ + public static String getOssDefaultPath() { + LocalDateTime now = LocalDateTime.now(); + String url = + now.getYear() + "/" + + now.getMonth() + "/" + + now.getDayOfMonth() + "/" + + now.getHour() + "/" + + now.getMinute() + "/"; + return url; + } + + public static String getOssFilePath(String filePath) { + String fileSuf = filePath.substring(filePath.indexOf(".") + 1); + return getOssDefaultPath() + UUID.randomUUID().toString() + "." + fileSuf; + } + +}