签入版本
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.xiaomayi</groupId>
|
||||
<artifactId>xiaomayi-common</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>xiaomayi-oss</artifactId>
|
||||
|
||||
<!-- 依赖声明 -->
|
||||
<dependencies>
|
||||
<!-- 核心依赖模块 -->
|
||||
<dependency>
|
||||
<groupId>com.xiaomayi</groupId>
|
||||
<artifactId>xiaomayi-core</artifactId>
|
||||
</dependency>
|
||||
<!-- 阿里云OSS云存储 -->
|
||||
<dependency>
|
||||
<groupId>com.aliyun.oss</groupId>
|
||||
<artifactId>aliyun-sdk-oss</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
+234
@@ -0,0 +1,234 @@
|
||||
// +======================================================================
|
||||
// | 小蚂蚁云·企业数字化开发平台 [ 加速数字化转型,构建智能未来 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | 核心价值:赋能开发者 · 服务企业 · 共建生态
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2020-2026 小蚂蚁云团队 版权所有
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方平台: https://www.xiaomayicloud.com
|
||||
// +======================================================================
|
||||
// | 【知识产权声明】
|
||||
// | 1. 权属声明:本软件是受《中华人民共和国著作权法》
|
||||
// | 保护的专有财产,完整版权归小蚂蚁云团队所有
|
||||
// | 2. 权利范围:所有知识产权(商标、专利、著作权、
|
||||
// | 商业秘密等)均归小蚂蚁云团队所有,受法律保护
|
||||
// | 3. 授权性质:用户仅可获得有限的、非独占的使用许可
|
||||
// | 4. 禁止行为:未经书面授权,禁止对本软件本身
|
||||
// | 申请任何知识产权
|
||||
// | 5. 权利保留:未在本协议中明示授予的一切权利
|
||||
// | 均由小蚂蚁云团队保留
|
||||
// +======================================================================
|
||||
// | 【授权状态说明】
|
||||
// | 1. 未授权状态:用户未购买有效的商业许可证
|
||||
// | 2. 商业授权:已购买正式商业许可证的用户
|
||||
// +======================================================================
|
||||
// | 【绝对禁止条款】
|
||||
// | 无论授权状态如何,任何用户均严格禁止以下行为:
|
||||
// | 1. 逆向工程:对软件进行反编译、反汇编、技术破解或任何形式的逆向分析
|
||||
// | 2. 版权破坏:移除、修改、遮挡软件中的版权标识、许可控制或技术保护措施
|
||||
// | 3. 非法传播:复制、分发、出租、出借、转售、再许可本软件或其许可权利
|
||||
// | 4. 竞争性使用:利用本软件的代码、架构、设计开发直接竞争的产品或服务
|
||||
// | 5. 侵权使用:将软件用于侵犯第三方知识产权或其他合法权益的用途
|
||||
// +======================================================================
|
||||
// | 【商业授权许可范围】
|
||||
// | 购买有效商业许可证的用户,在遵守上述禁止条款的前提下,获得:
|
||||
// | 1. 使用权利:在许可证约定的项目数量、开发者数量范围内使用本软件
|
||||
// | 2. 技术支持:商业授权用户可以获取本地开发部署的技术支持服务
|
||||
// | 3. 版本更新:在许可证有效期内获取软件更新、安全补丁和功能增强
|
||||
// | 4. 商业部署:将基于本软件开发的应用程序用于商业运营和生产环境
|
||||
// +======================================================================
|
||||
// | 【许可证获取】
|
||||
// | 1. 获取途径:仅通过小蚂蚁云官方渠道购买(官网、授权代理商),购买记录凭证
|
||||
// | 2. 转让限制:许可证与购买主体绑定,未经书面同意不得转让
|
||||
// | 3. 终止情形:许可证到期、违反协议、破产清算等情况下自动终止
|
||||
// +======================================================================
|
||||
// | 【合法使用要求】
|
||||
// | 1. 仅限用于合法合规的软件研发
|
||||
// | 2. 严禁用于任何违法、侵权或恶意行为
|
||||
// | 3. 严禁违反我国法律法规和政策
|
||||
// +======================================================================
|
||||
// | 【免责声明】
|
||||
// | 因使用本框架导致的以下情况,我们概不负责:
|
||||
// | 1. 项目研发中的意外、疏忽、违约等风险
|
||||
// | 2. 侵犯第三方知识产权或其他合法权益
|
||||
// | 3. 任何直接、间接、附带或衍生一切损失
|
||||
// | 4. 用户违规违法行为的一切法律后果
|
||||
// +======================================================================
|
||||
// | 【协议重要提示】
|
||||
// | 1. 本声明是《小蚂蚁云最终用户许可协议》的摘要版本
|
||||
// | 2. 下载、安装或使用本软件即表示您接受全部协议条款
|
||||
// | 3. 我们保留单方面修改本声明的权利,修改后的版本在官网公布即生效
|
||||
// | 4. 用户有义务定期查看最新版本,继续使用视为接受修改
|
||||
// +======================================================================
|
||||
// | 【侵权举报与合规】
|
||||
// | 1. 知识产权侵权举报:请联系官方客服
|
||||
// | 2. 许可证合规咨询:xiaomayicloud@163.com
|
||||
// | 3. 违规使用将终止授权并追究责任
|
||||
// | 4. 无条件配合司法机关调查取证
|
||||
// | 5. 保留一切法律追诉权利
|
||||
// | 6. 对有效举报和合规建议,我们将给予感谢和奖励
|
||||
// +======================================================================
|
||||
|
||||
package com.xiaomayi.oss.config;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 阿里云OSS云存储配置类
|
||||
* </p>
|
||||
*
|
||||
* @author 小蚂蚁云团队
|
||||
* @since 2024-05-30
|
||||
*/
|
||||
@Configuration
|
||||
// 指定配置文件位置
|
||||
//@PropertySource(value = {"classpath:application-aliyun.yml"})
|
||||
@ConfigurationProperties(prefix = "aliyun.oss")
|
||||
public class AliyunOssConfig {
|
||||
|
||||
/**
|
||||
* 存储空间名称
|
||||
* 示例:yhzz-dev-nc
|
||||
* 存储桶的唯一标识名称
|
||||
*/
|
||||
private static String bucketName;
|
||||
|
||||
/**
|
||||
* OSS服务访问端点
|
||||
* 示例:oss-cn-hangzhou.aliyuncs.com
|
||||
* OSS服务的API访问地址
|
||||
*/
|
||||
private static String endpoint;
|
||||
|
||||
/**
|
||||
* 地域标识
|
||||
* 示例:oss-cn-hangzhou
|
||||
* Bucket所在的地域代码
|
||||
*/
|
||||
private static String region;
|
||||
|
||||
/**
|
||||
* 是否使用HTTPS安全连接
|
||||
* true: 使用HTTPS加密传输
|
||||
* false: 使用HTTP普通传输
|
||||
*/
|
||||
private static Boolean secure;
|
||||
|
||||
/**
|
||||
* 请求超时时间(毫秒)
|
||||
* 示例:600000 (10分钟)
|
||||
* 网络请求的最大等待时间
|
||||
*/
|
||||
private static Long timeout;
|
||||
|
||||
/**
|
||||
* 访问密钥ID
|
||||
* 阿里云AccessKey的ID部分
|
||||
* 用于标识用户身份
|
||||
*/
|
||||
private static String accessKeyId;
|
||||
|
||||
/**
|
||||
* 访问密钥密钥
|
||||
* 阿里云AccessKey的密钥部分
|
||||
* 重要:需要妥善保管,避免泄露
|
||||
*/
|
||||
private static String accessKeySecret;
|
||||
|
||||
/**
|
||||
* 绑定桶的访问域名
|
||||
* 用于生成文件访问URL的完整域名地址,支持以下形式:
|
||||
* <p>
|
||||
* 1. 默认OSS域名格式:
|
||||
* - HTTPS: https://{bucketName}.{endpoint}
|
||||
* - HTTP: http://{bucketName}.{endpoint}
|
||||
* 示例: https://yhzz-dev-nc.oss-cn-hangzhou.aliyuncs.com
|
||||
* <p>
|
||||
* 2. 自定义域名(推荐):
|
||||
* - 需要在阿里云OSS控制台绑定自定义域名
|
||||
* - 需要配置域名解析(CNAME记录)
|
||||
* 示例: https://oss.yunheng.com
|
||||
* <p>
|
||||
* 3. CDN加速域名:
|
||||
* - 通过CDN加速文件访问
|
||||
* - 需要配置CDN域名和回源设置
|
||||
* 示例: https://cdn.yunheng.com
|
||||
* <p>
|
||||
* 使用场景:
|
||||
* - 文件上传后生成完整的访问链接
|
||||
* - 前端页面直接显示图片、视频等文件
|
||||
* - 文件分享和下载
|
||||
* <p>
|
||||
* 配置建议:
|
||||
* - 生产环境建议使用自定义域名 + HTTPS
|
||||
* - 如果secure=true,域名应以https://开头
|
||||
* - 域名末尾不要包含斜杠(/)
|
||||
*/
|
||||
private static String domainUrl;
|
||||
|
||||
public static String getBucketName() {
|
||||
return bucketName;
|
||||
}
|
||||
|
||||
public void setBucketName(String bucketName) {
|
||||
AliyunOssConfig.bucketName = bucketName;
|
||||
}
|
||||
|
||||
public static String getEndpoint() {
|
||||
return endpoint;
|
||||
}
|
||||
|
||||
public void setEndpoint(String endpoint) {
|
||||
AliyunOssConfig.endpoint = endpoint;
|
||||
}
|
||||
|
||||
public static String getRegion() {
|
||||
return region;
|
||||
}
|
||||
|
||||
public void setRegion(String region) {
|
||||
AliyunOssConfig.region = region;
|
||||
}
|
||||
|
||||
public static Boolean getSecure() {
|
||||
return secure;
|
||||
}
|
||||
|
||||
public void setSecure(Boolean secure) {
|
||||
AliyunOssConfig.secure = secure;
|
||||
}
|
||||
|
||||
public static Long getTimeout() {
|
||||
return timeout;
|
||||
}
|
||||
|
||||
public void setTimeout(Long timeout) {
|
||||
AliyunOssConfig.timeout = timeout;
|
||||
}
|
||||
|
||||
public static String getAccessKeyId() {
|
||||
return accessKeyId;
|
||||
}
|
||||
|
||||
public void setAccessKeyId(String accessKeyId) {
|
||||
AliyunOssConfig.accessKeyId = accessKeyId;
|
||||
}
|
||||
|
||||
public static String getAccessKeySecret() {
|
||||
return accessKeySecret;
|
||||
}
|
||||
|
||||
public void setAccessKeySecret(String accessKeySecret) {
|
||||
AliyunOssConfig.accessKeySecret = accessKeySecret;
|
||||
}
|
||||
|
||||
public static String getDomainUrl() {
|
||||
return domainUrl;
|
||||
}
|
||||
|
||||
public void setDomainUrl(String domainUrl) {
|
||||
AliyunOssConfig.domainUrl = domainUrl;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,452 @@
|
||||
// +======================================================================
|
||||
// | 小蚂蚁云·企业数字化开发平台 [ 加速数字化转型,构建智能未来 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | 核心价值:赋能开发者 · 服务企业 · 共建生态
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2020-2026 小蚂蚁云团队 版权所有
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方平台: https://www.xiaomayicloud.com
|
||||
// +======================================================================
|
||||
// | 【知识产权声明】
|
||||
// | 1. 权属声明:本软件是受《中华人民共和国著作权法》
|
||||
// | 保护的专有财产,完整版权归小蚂蚁云团队所有
|
||||
// | 2. 权利范围:所有知识产权(商标、专利、著作权、
|
||||
// | 商业秘密等)均归小蚂蚁云团队所有,受法律保护
|
||||
// | 3. 授权性质:用户仅可获得有限的、非独占的使用许可
|
||||
// | 4. 禁止行为:未经书面授权,禁止对本软件本身
|
||||
// | 申请任何知识产权
|
||||
// | 5. 权利保留:未在本协议中明示授予的一切权利
|
||||
// | 均由小蚂蚁云团队保留
|
||||
// +======================================================================
|
||||
// | 【授权状态说明】
|
||||
// | 1. 未授权状态:用户未购买有效的商业许可证
|
||||
// | 2. 商业授权:已购买正式商业许可证的用户
|
||||
// +======================================================================
|
||||
// | 【绝对禁止条款】
|
||||
// | 无论授权状态如何,任何用户均严格禁止以下行为:
|
||||
// | 1. 逆向工程:对软件进行反编译、反汇编、技术破解或任何形式的逆向分析
|
||||
// | 2. 版权破坏:移除、修改、遮挡软件中的版权标识、许可控制或技术保护措施
|
||||
// | 3. 非法传播:复制、分发、出租、出借、转售、再许可本软件或其许可权利
|
||||
// | 4. 竞争性使用:利用本软件的代码、架构、设计开发直接竞争的产品或服务
|
||||
// | 5. 侵权使用:将软件用于侵犯第三方知识产权或其他合法权益的用途
|
||||
// +======================================================================
|
||||
// | 【商业授权许可范围】
|
||||
// | 购买有效商业许可证的用户,在遵守上述禁止条款的前提下,获得:
|
||||
// | 1. 使用权利:在许可证约定的项目数量、开发者数量范围内使用本软件
|
||||
// | 2. 技术支持:商业授权用户可以获取本地开发部署的技术支持服务
|
||||
// | 3. 版本更新:在许可证有效期内获取软件更新、安全补丁和功能增强
|
||||
// | 4. 商业部署:将基于本软件开发的应用程序用于商业运营和生产环境
|
||||
// +======================================================================
|
||||
// | 【许可证获取】
|
||||
// | 1. 获取途径:仅通过小蚂蚁云官方渠道购买(官网、授权代理商),购买记录凭证
|
||||
// | 2. 转让限制:许可证与购买主体绑定,未经书面同意不得转让
|
||||
// | 3. 终止情形:许可证到期、违反协议、破产清算等情况下自动终止
|
||||
// +======================================================================
|
||||
// | 【合法使用要求】
|
||||
// | 1. 仅限用于合法合规的软件研发
|
||||
// | 2. 严禁用于任何违法、侵权或恶意行为
|
||||
// | 3. 严禁违反我国法律法规和政策
|
||||
// +======================================================================
|
||||
// | 【免责声明】
|
||||
// | 因使用本框架导致的以下情况,我们概不负责:
|
||||
// | 1. 项目研发中的意外、疏忽、违约等风险
|
||||
// | 2. 侵犯第三方知识产权或其他合法权益
|
||||
// | 3. 任何直接、间接、附带或衍生一切损失
|
||||
// | 4. 用户违规违法行为的一切法律后果
|
||||
// +======================================================================
|
||||
// | 【协议重要提示】
|
||||
// | 1. 本声明是《小蚂蚁云最终用户许可协议》的摘要版本
|
||||
// | 2. 下载、安装或使用本软件即表示您接受全部协议条款
|
||||
// | 3. 我们保留单方面修改本声明的权利,修改后的版本在官网公布即生效
|
||||
// | 4. 用户有义务定期查看最新版本,继续使用视为接受修改
|
||||
// +======================================================================
|
||||
// | 【侵权举报与合规】
|
||||
// | 1. 知识产权侵权举报:请联系官方客服
|
||||
// | 2. 许可证合规咨询:xiaomayicloud@163.com
|
||||
// | 3. 违规使用将终止授权并追究责任
|
||||
// | 4. 无条件配合司法机关调查取证
|
||||
// | 5. 保留一切法律追诉权利
|
||||
// | 6. 对有效举报和合规建议,我们将给予感谢和奖励
|
||||
// +======================================================================
|
||||
|
||||
package com.xiaomayi.oss.utils;
|
||||
|
||||
|
||||
import com.aliyun.oss.ClientBuilderConfiguration;
|
||||
import com.aliyun.oss.OSS;
|
||||
import com.aliyun.oss.OSSClientBuilder;
|
||||
import com.aliyun.oss.OSSException;
|
||||
import com.aliyun.oss.common.comm.Protocol;
|
||||
import com.aliyun.oss.model.OSSObject;
|
||||
import com.aliyun.oss.model.ObjectMetadata;
|
||||
import com.xiaomayi.core.utils.DateUtils;
|
||||
import com.xiaomayi.core.utils.StringUtils;
|
||||
import com.xiaomayi.oss.config.AliyunOssConfig;
|
||||
import com.xiaomayi.oss.vo.AliyunOSSVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 阿里云OSS云存储工具类
|
||||
* </p>
|
||||
*
|
||||
* @author 小蚂蚁云团队
|
||||
* @since 2024-05-30
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class AliyunOSSUtil {
|
||||
|
||||
/**
|
||||
* 允许文件上传后缀
|
||||
*/
|
||||
private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".gif", ".png"};
|
||||
|
||||
/**
|
||||
* 创建OSS连接实例
|
||||
*
|
||||
* @return 返回结果
|
||||
*/
|
||||
private static OSS getOssClient() {
|
||||
// 获取oss的地域节点
|
||||
String endpoint = AliyunOssConfig.getEndpoint();
|
||||
// 获取oss的AccessKeySecret
|
||||
String accessKeySecret = AliyunOssConfig.getAccessKeySecret();
|
||||
// 获取oss的AccessKeyId
|
||||
String accessKeyId = AliyunOssConfig.getAccessKeyId();
|
||||
|
||||
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
|
||||
// 设置OSSClient允许打开的最大HTTP连接数,默认为1024个。
|
||||
conf.setMaxConnections(200);
|
||||
// 设置Socket层传输数据的超时时间,默认为50000毫秒。
|
||||
conf.setSocketTimeout(10000);
|
||||
// 设置建立连接的超时时间,默认为50000毫秒。
|
||||
conf.setConnectionTimeout(10000);
|
||||
// 设置从连接池中获取连接的超时时间(单位:毫秒),默认不超时。
|
||||
conf.setConnectionRequestTimeout(1000);
|
||||
// 设置连接空闲超时时间。超时则关闭连接,默认为60000毫秒。
|
||||
conf.setIdleConnectionTime(10000);
|
||||
// 设置失败请求重试次数,默认为3次。
|
||||
conf.setMaxErrorRetry(5);
|
||||
// 设置是否支持将自定义域名作为Endpoint,默认支持。
|
||||
conf.setSupportCname(true);
|
||||
// 设置是否开启二级域名的访问方式,默认不开启。
|
||||
// conf.setSLDEnabled(true);
|
||||
// 设置连接OSS所使用的协议(HTTP或HTTPS),默认为HTTP。
|
||||
conf.setProtocol(Protocol.HTTPS);
|
||||
// 设置用户代理,指HTTP的User-Agent头,默认为aliyun-sdk-java。
|
||||
/*conf.setUserAgent("aliyun-sdk-java");
|
||||
// 设置代理服务器端口。
|
||||
conf.setProxyHost("<yourProxyHost>");
|
||||
// 设置代理服务器验证的用户名。
|
||||
conf.setProxyUsername("<yourProxyUserName>");
|
||||
// 设置代理服务器验证的密码。
|
||||
conf.setProxyPassword("<yourProxyPassword>");*/
|
||||
// 设置是否开启HTTP重定向,默认开启。
|
||||
conf.setRedirectEnable(true);
|
||||
// 设置是否开启SSL证书校验,默认开启。
|
||||
conf.setVerifySSLEnable(true);
|
||||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret, conf);
|
||||
return ossClient;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据文件路径获取OSS访问地址
|
||||
* 备注:需要对中文路径进行URL编码
|
||||
*
|
||||
* @param filePath 文件路径
|
||||
* @return 返回结果
|
||||
*/
|
||||
public static String getFileURL(String filePath) {
|
||||
// 地域节点
|
||||
String endpoint = AliyunOssConfig.getEndpoint();
|
||||
// 判断文件路径是否已包含
|
||||
if (filePath.contains(endpoint)) {
|
||||
// 直接返回
|
||||
return filePath;
|
||||
}
|
||||
String encode = null;
|
||||
try {
|
||||
// 文件路径分裂处理
|
||||
String[] strings = filePath.split("/");
|
||||
// 获取文件路径和文件名
|
||||
String lastIndex = strings[strings.length - 1];
|
||||
// URL编码
|
||||
lastIndex = URLEncoder.encode(lastIndex, "utf-8");
|
||||
// 重新赋值
|
||||
strings[strings.length - 1] = lastIndex;
|
||||
// 数组重新已斜杠拼接
|
||||
encode = String.join("/", strings);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
log.error("文件处理错误:{}", e.getMessage());
|
||||
}
|
||||
// 返回结果
|
||||
return String.format("%s://%s/%s", Protocol.HTTPS, AliyunOssConfig.getEndpoint(), encode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
*
|
||||
* @param uploadFile 文件对象
|
||||
* @param folder 文件夹
|
||||
* @param fileName 文件名
|
||||
* @return 返回结果
|
||||
*/
|
||||
public static AliyunOSSVO upload(MultipartFile uploadFile, String folder, String fileName) {
|
||||
// 获取OSS存储桶名称
|
||||
String bucketName = AliyunOssConfig.getBucketName();
|
||||
// 获取文件原名称
|
||||
String originalFilename = uploadFile.getOriginalFilename();
|
||||
// 构建日期路径, 例如:OSS目标文件夹/2024/05/30/文件名
|
||||
// 文件上传的路径地址
|
||||
String filePath = folder + "/" + fileName;
|
||||
// 获取文件输入流
|
||||
InputStream inputStream = null;
|
||||
try {
|
||||
inputStream = uploadFile.getInputStream();
|
||||
} catch (IOException e) {
|
||||
log.error("上传文件异常:{}", e.getMessage());
|
||||
}
|
||||
/*
|
||||
* 下面两行代码是重点坑:
|
||||
* 现在阿里云OSS 默认图片上传ContentType是image/jpeg
|
||||
* 也就是说,获取图片链接后,图片是下载链接,而并非在线浏览链接,
|
||||
* 因此,这里在上传的时候要解决ContentType的问题,将其改为image/jpg
|
||||
*/
|
||||
ObjectMetadata metadata = new ObjectMetadata();
|
||||
for (String type : IMAGE_TYPE) {
|
||||
if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) {
|
||||
metadata.setContentType("image/jpg");
|
||||
}
|
||||
}
|
||||
// 获取阿里云OSS实例
|
||||
OSS ossClient = getOssClient();
|
||||
// 文件上传至阿里云OSS
|
||||
ossClient.putObject(bucketName, filePath, inputStream, metadata);
|
||||
|
||||
// 获取文件上传后的图片返回地址
|
||||
String fileUrl = getFileURL(filePath);
|
||||
|
||||
// 实例化VO对象
|
||||
AliyunOSSVO aliyunOSSVO = new AliyunOSSVO();
|
||||
aliyunOSSVO.setFileName(originalFilename);
|
||||
aliyunOSSVO.setFilePath(filePath);
|
||||
aliyunOSSVO.setFileUrl(fileUrl);
|
||||
|
||||
// 返回结果
|
||||
return aliyunOSSVO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传文件至OSS
|
||||
*
|
||||
* @param filePath 文件完整路径
|
||||
* @param folder 文件夹
|
||||
* @param delFile 是否删除
|
||||
* @return 返回结果
|
||||
*/
|
||||
public static AliyunOSSVO uploadWithOss(String filePath, String folder, Boolean delFile) {
|
||||
// 实例化文件
|
||||
File file = new File(filePath);
|
||||
// 判断文件是否存在
|
||||
if (!file.exists()) {
|
||||
return null;
|
||||
}
|
||||
// 原始文件名
|
||||
String fileName = file.getName();
|
||||
// 获取OSS存储桶名称
|
||||
String bucketName = AliyunOssConfig.getBucketName();
|
||||
// 日期文件夹路径
|
||||
String datePath = DateUtils.datePath();
|
||||
// 准备上传OSS的文件路径和文件名
|
||||
String objectName = folder + "/" + datePath + "/" + fileName;
|
||||
// 实例化文件流
|
||||
FileInputStream fileInputStream = null;
|
||||
try {
|
||||
// 根据文件创建文件流
|
||||
fileInputStream = new FileInputStream(file);
|
||||
// 获取OSS云存储实例
|
||||
OSS ossClient = getOssClient();
|
||||
// 文件上传至阿里云OSS
|
||||
ossClient.putObject(bucketName, objectName, fileInputStream);
|
||||
} catch (FileNotFoundException e) {
|
||||
log.error("文件上传失败:{}", e.getMessage());
|
||||
} finally {
|
||||
try {
|
||||
if (null != fileInputStream) {
|
||||
// 关闭文件流
|
||||
fileInputStream.close();
|
||||
// 删除文件
|
||||
if (delFile) {
|
||||
file.delete();
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
log.error("文件流关闭失败:{}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 获取文件上传后的地址
|
||||
String fileUrl = getFileURL(objectName);
|
||||
|
||||
// 实例化VO对象
|
||||
AliyunOSSVO aliyunOSSVO = new AliyunOSSVO();
|
||||
aliyunOSSVO.setFileName(fileName);
|
||||
aliyunOSSVO.setFilePath(filePath);
|
||||
aliyunOSSVO.setFileUrl(fileUrl);
|
||||
|
||||
// 返回结果
|
||||
return aliyunOSSVO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传文件流至OSS
|
||||
*
|
||||
* @param inputStream 文件流
|
||||
* @param folder 文件夹
|
||||
* @param fileName 文件名称
|
||||
* @return 返回结果
|
||||
*/
|
||||
public static AliyunOSSVO uploadWithInputStream(InputStream inputStream, String folder, String fileName) {
|
||||
// 获取OSS存储桶名称
|
||||
String bucketName = AliyunOssConfig.getBucketName();
|
||||
// 新文件名称
|
||||
String filePath = String.format("%s/%s/%s", folder, DateUtils.datePath(), fileName);
|
||||
|
||||
try {
|
||||
// 获取OSS存储实例
|
||||
OSS ossClient = getOssClient();
|
||||
// 文件上传至阿里云OSS
|
||||
ossClient.putObject(bucketName, filePath, inputStream);
|
||||
} catch (OSSException oe) {
|
||||
log.error("文件上传失败:{}", oe.getMessage());
|
||||
} finally {
|
||||
try {
|
||||
if (null != inputStream) {
|
||||
// 关闭文件流
|
||||
inputStream.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
log.error("文件流关闭失败:{}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 获取文件上传后的地址
|
||||
String fileUrl = getFileURL(filePath);
|
||||
|
||||
// 实例化VO对象
|
||||
AliyunOSSVO aliyunOSSVO = new AliyunOSSVO();
|
||||
aliyunOSSVO.setFileName(fileName);
|
||||
aliyunOSSVO.setFilePath(filePath);
|
||||
aliyunOSSVO.setFileUrl(fileUrl);
|
||||
|
||||
// 返回结果
|
||||
return aliyunOSSVO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载远程OSS文件至本地
|
||||
*
|
||||
* @param filePath OSS文件路径
|
||||
* @param newFile 目标文件
|
||||
*/
|
||||
public static void writeLocalFile(String filePath, String newFile) {
|
||||
try {
|
||||
// 实例化目标文件
|
||||
File destFile = new File(newFile);
|
||||
// 创建目录
|
||||
if (destFile.getParentFile().exists()) {
|
||||
destFile.getParentFile().mkdirs();
|
||||
}
|
||||
// 实例化OSS客户端实例
|
||||
OSS ossClient = getOssClient();
|
||||
// 获取OSS云存储桶名称
|
||||
String bucketName = AliyunOssConfig.getBucketName();
|
||||
// 根据存储桶名称、文件路径获取OSS文件对象
|
||||
OSSObject ossObject = ossClient.getObject(bucketName, filePath);
|
||||
// 读取文件内容
|
||||
InputStream inputStream = ossObject.getObjectContent();
|
||||
if (null != inputStream) {
|
||||
// 把输入流放入缓存流
|
||||
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
|
||||
// 实例化目标文件流
|
||||
FileOutputStream fileOutputStream = new FileOutputStream(newFile);
|
||||
// 把输出流放入缓存流
|
||||
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
|
||||
byte[] buffer = new byte[1024];
|
||||
int len = 0;
|
||||
while ((len = bufferedInputStream.read(buffer)) != -1) {
|
||||
bufferedOutputStream.write(buffer, 0, len);
|
||||
}
|
||||
bufferedOutputStream.flush();
|
||||
bufferedOutputStream.close();
|
||||
bufferedInputStream.close();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("文件写入本地失败:{}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 删除OSS文件
|
||||
*
|
||||
* @param filePath OSS文件路径
|
||||
* @return 返回结果
|
||||
*/
|
||||
public static Boolean delete(String filePath) {
|
||||
try {
|
||||
// 获取OSS云存储实例
|
||||
OSS ossClient = getOssClient();
|
||||
// 获取OSS云存储桶名称
|
||||
String bucketName = AliyunOssConfig.getBucketName();
|
||||
// 从OSS存储桶中删除指定文件
|
||||
ossClient.deleteObject(bucketName, filePath);
|
||||
// 返回结果
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
log.error("删除文件失败:{}", e.getMessage());
|
||||
// 返回结果
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* OSS云存储文件拷贝
|
||||
*
|
||||
* @param oldFilePath 原文件
|
||||
* @param destFilePath 目标文件
|
||||
* @return 返回结果
|
||||
*/
|
||||
public static boolean copyFile(String oldFilePath, String destFilePath) {
|
||||
// 原文件判空
|
||||
if (StringUtils.isEmpty(oldFilePath)) {
|
||||
return false;
|
||||
}
|
||||
// 目标文件判空
|
||||
if (StringUtils.isEmpty(destFilePath)) {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
// 获取OSS云存储桶名称
|
||||
String bucketName = AliyunOssConfig.getBucketName();
|
||||
// 获取OSS云存储客户端实例
|
||||
OSS ossClient = getOssClient();
|
||||
// 判断存储桶中是否次存在原文件
|
||||
if (ossClient.doesObjectExist(bucketName, oldFilePath)) {
|
||||
// 从存储桶A拷贝文件A至存储桶B文件B
|
||||
ossClient.copyObject(bucketName, oldFilePath, bucketName, destFilePath);
|
||||
}
|
||||
return true;
|
||||
} catch (OSSException e) {
|
||||
log.error("文件拷贝失败:{}", e.getMessage());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
// +======================================================================
|
||||
// | 小蚂蚁云·企业数字化开发平台 [ 加速数字化转型,构建智能未来 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | 核心价值:赋能开发者 · 服务企业 · 共建生态
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2020-2026 小蚂蚁云团队 版权所有
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方平台: https://www.xiaomayicloud.com
|
||||
// +======================================================================
|
||||
// | 【知识产权声明】
|
||||
// | 1. 权属声明:本软件是受《中华人民共和国著作权法》
|
||||
// | 保护的专有财产,完整版权归小蚂蚁云团队所有
|
||||
// | 2. 权利范围:所有知识产权(商标、专利、著作权、
|
||||
// | 商业秘密等)均归小蚂蚁云团队所有,受法律保护
|
||||
// | 3. 授权性质:用户仅可获得有限的、非独占的使用许可
|
||||
// | 4. 禁止行为:未经书面授权,禁止对本软件本身
|
||||
// | 申请任何知识产权
|
||||
// | 5. 权利保留:未在本协议中明示授予的一切权利
|
||||
// | 均由小蚂蚁云团队保留
|
||||
// +======================================================================
|
||||
// | 【授权状态说明】
|
||||
// | 1. 未授权状态:用户未购买有效的商业许可证
|
||||
// | 2. 商业授权:已购买正式商业许可证的用户
|
||||
// +======================================================================
|
||||
// | 【绝对禁止条款】
|
||||
// | 无论授权状态如何,任何用户均严格禁止以下行为:
|
||||
// | 1. 逆向工程:对软件进行反编译、反汇编、技术破解或任何形式的逆向分析
|
||||
// | 2. 版权破坏:移除、修改、遮挡软件中的版权标识、许可控制或技术保护措施
|
||||
// | 3. 非法传播:复制、分发、出租、出借、转售、再许可本软件或其许可权利
|
||||
// | 4. 竞争性使用:利用本软件的代码、架构、设计开发直接竞争的产品或服务
|
||||
// | 5. 侵权使用:将软件用于侵犯第三方知识产权或其他合法权益的用途
|
||||
// +======================================================================
|
||||
// | 【商业授权许可范围】
|
||||
// | 购买有效商业许可证的用户,在遵守上述禁止条款的前提下,获得:
|
||||
// | 1. 使用权利:在许可证约定的项目数量、开发者数量范围内使用本软件
|
||||
// | 2. 技术支持:商业授权用户可以获取本地开发部署的技术支持服务
|
||||
// | 3. 版本更新:在许可证有效期内获取软件更新、安全补丁和功能增强
|
||||
// | 4. 商业部署:将基于本软件开发的应用程序用于商业运营和生产环境
|
||||
// +======================================================================
|
||||
// | 【许可证获取】
|
||||
// | 1. 获取途径:仅通过小蚂蚁云官方渠道购买(官网、授权代理商),购买记录凭证
|
||||
// | 2. 转让限制:许可证与购买主体绑定,未经书面同意不得转让
|
||||
// | 3. 终止情形:许可证到期、违反协议、破产清算等情况下自动终止
|
||||
// +======================================================================
|
||||
// | 【合法使用要求】
|
||||
// | 1. 仅限用于合法合规的软件研发
|
||||
// | 2. 严禁用于任何违法、侵权或恶意行为
|
||||
// | 3. 严禁违反我国法律法规和政策
|
||||
// +======================================================================
|
||||
// | 【免责声明】
|
||||
// | 因使用本框架导致的以下情况,我们概不负责:
|
||||
// | 1. 项目研发中的意外、疏忽、违约等风险
|
||||
// | 2. 侵犯第三方知识产权或其他合法权益
|
||||
// | 3. 任何直接、间接、附带或衍生一切损失
|
||||
// | 4. 用户违规违法行为的一切法律后果
|
||||
// +======================================================================
|
||||
// | 【协议重要提示】
|
||||
// | 1. 本声明是《小蚂蚁云最终用户许可协议》的摘要版本
|
||||
// | 2. 下载、安装或使用本软件即表示您接受全部协议条款
|
||||
// | 3. 我们保留单方面修改本声明的权利,修改后的版本在官网公布即生效
|
||||
// | 4. 用户有义务定期查看最新版本,继续使用视为接受修改
|
||||
// +======================================================================
|
||||
// | 【侵权举报与合规】
|
||||
// | 1. 知识产权侵权举报:请联系官方客服
|
||||
// | 2. 许可证合规咨询:xiaomayicloud@163.com
|
||||
// | 3. 违规使用将终止授权并追究责任
|
||||
// | 4. 无条件配合司法机关调查取证
|
||||
// | 5. 保留一切法律追诉权利
|
||||
// | 6. 对有效举报和合规建议,我们将给予感谢和奖励
|
||||
// +======================================================================
|
||||
|
||||
package com.xiaomayi.oss.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 阿里云OSS云存储返回VO
|
||||
* </p>
|
||||
*
|
||||
* @author 小蚂蚁云团队
|
||||
* @since 2024-05-30
|
||||
*/
|
||||
@Data
|
||||
public class AliyunOSSVO {
|
||||
|
||||
/**
|
||||
* 文件名称
|
||||
*/
|
||||
private String fileName;
|
||||
|
||||
/**
|
||||
* 文件路径,上传OSS后返回的文件路径
|
||||
*/
|
||||
private String filePath;
|
||||
|
||||
/**
|
||||
* 文件URL
|
||||
*/
|
||||
private String fileUrl;
|
||||
|
||||
}
|
||||
+166
@@ -0,0 +1,166 @@
|
||||
// +======================================================================
|
||||
// | 小蚂蚁云·企业数字化开发平台 [ 加速数字化转型,构建智能未来 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | 核心价值:赋能开发者 · 服务企业 · 共建生态
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2020-2026 小蚂蚁云团队 版权所有
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方平台: https://www.xiaomayicloud.com
|
||||
// +======================================================================
|
||||
// | 【知识产权声明】
|
||||
// | 1. 权属声明:本软件是受《中华人民共和国著作权法》
|
||||
// | 保护的专有财产,完整版权归小蚂蚁云团队所有
|
||||
// | 2. 权利范围:所有知识产权(商标、专利、著作权、
|
||||
// | 商业秘密等)均归小蚂蚁云团队所有,受法律保护
|
||||
// | 3. 授权性质:用户仅可获得有限的、非独占的使用许可
|
||||
// | 4. 禁止行为:未经书面授权,禁止对本软件本身
|
||||
// | 申请任何知识产权
|
||||
// | 5. 权利保留:未在本协议中明示授予的一切权利
|
||||
// | 均由小蚂蚁云团队保留
|
||||
// +======================================================================
|
||||
// | 【授权状态说明】
|
||||
// | 1. 未授权状态:用户未购买有效的商业许可证
|
||||
// | 2. 商业授权:已购买正式商业许可证的用户
|
||||
// +======================================================================
|
||||
// | 【绝对禁止条款】
|
||||
// | 无论授权状态如何,任何用户均严格禁止以下行为:
|
||||
// | 1. 逆向工程:对软件进行反编译、反汇编、技术破解或任何形式的逆向分析
|
||||
// | 2. 版权破坏:移除、修改、遮挡软件中的版权标识、许可控制或技术保护措施
|
||||
// | 3. 非法传播:复制、分发、出租、出借、转售、再许可本软件或其许可权利
|
||||
// | 4. 竞争性使用:利用本软件的代码、架构、设计开发直接竞争的产品或服务
|
||||
// | 5. 侵权使用:将软件用于侵犯第三方知识产权或其他合法权益的用途
|
||||
// +======================================================================
|
||||
// | 【商业授权许可范围】
|
||||
// | 购买有效商业许可证的用户,在遵守上述禁止条款的前提下,获得:
|
||||
// | 1. 使用权利:在许可证约定的项目数量、开发者数量范围内使用本软件
|
||||
// | 2. 技术支持:商业授权用户可以获取本地开发部署的技术支持服务
|
||||
// | 3. 版本更新:在许可证有效期内获取软件更新、安全补丁和功能增强
|
||||
// | 4. 商业部署:将基于本软件开发的应用程序用于商业运营和生产环境
|
||||
// +======================================================================
|
||||
// | 【许可证获取】
|
||||
// | 1. 获取途径:仅通过小蚂蚁云官方渠道购买(官网、授权代理商),购买记录凭证
|
||||
// | 2. 转让限制:许可证与购买主体绑定,未经书面同意不得转让
|
||||
// | 3. 终止情形:许可证到期、违反协议、破产清算等情况下自动终止
|
||||
// +======================================================================
|
||||
// | 【合法使用要求】
|
||||
// | 1. 仅限用于合法合规的软件研发
|
||||
// | 2. 严禁用于任何违法、侵权或恶意行为
|
||||
// | 3. 严禁违反我国法律法规和政策
|
||||
// +======================================================================
|
||||
// | 【免责声明】
|
||||
// | 因使用本框架导致的以下情况,我们概不负责:
|
||||
// | 1. 项目研发中的意外、疏忽、违约等风险
|
||||
// | 2. 侵犯第三方知识产权或其他合法权益
|
||||
// | 3. 任何直接、间接、附带或衍生一切损失
|
||||
// | 4. 用户违规违法行为的一切法律后果
|
||||
// +======================================================================
|
||||
// | 【协议重要提示】
|
||||
// | 1. 本声明是《小蚂蚁云最终用户许可协议》的摘要版本
|
||||
// | 2. 下载、安装或使用本软件即表示您接受全部协议条款
|
||||
// | 3. 我们保留单方面修改本声明的权利,修改后的版本在官网公布即生效
|
||||
// | 4. 用户有义务定期查看最新版本,继续使用视为接受修改
|
||||
// +======================================================================
|
||||
// | 【侵权举报与合规】
|
||||
// | 1. 知识产权侵权举报:请联系官方客服
|
||||
// | 2. 许可证合规咨询:xiaomayicloud@163.com
|
||||
// | 3. 违规使用将终止授权并追究责任
|
||||
// | 4. 无条件配合司法机关调查取证
|
||||
// | 5. 保留一切法律追诉权利
|
||||
// | 6. 对有效举报和合规建议,我们将给予感谢和奖励
|
||||
// +======================================================================
|
||||
|
||||
package com.xiaomayi.oss.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 阿里云OSS配置值对象
|
||||
* 用于封装云存储服务的配置信息
|
||||
*
|
||||
* @author 小蚂蚁云团队
|
||||
* @since 2024-05-30
|
||||
*/
|
||||
@Data
|
||||
public class AliyunOssConfigVO {
|
||||
|
||||
/**
|
||||
* 存储空间名称
|
||||
* 示例:yhzz-dev-nc
|
||||
* 存储桶的唯一标识名称
|
||||
*/
|
||||
private String bucketName;
|
||||
|
||||
/**
|
||||
* OSS服务访问端点
|
||||
* 示例:oss-cn-hangzhou.aliyuncs.com
|
||||
* OSS服务的API访问地址
|
||||
*/
|
||||
private String endpoint;
|
||||
|
||||
/**
|
||||
* 地域标识
|
||||
* 示例:oss-cn-hangzhou
|
||||
* Bucket所在的地域代码
|
||||
*/
|
||||
private String region;
|
||||
|
||||
/**
|
||||
* 是否使用HTTPS安全连接
|
||||
* true: 使用HTTPS加密传输
|
||||
* false: 使用HTTP普通传输
|
||||
*/
|
||||
private Boolean secure = true;
|
||||
|
||||
/**
|
||||
* 请求超时时间(毫秒)
|
||||
* 示例:600000 (10分钟)
|
||||
* 网络请求的最大等待时间
|
||||
*/
|
||||
private Long timeout = 600000L;
|
||||
|
||||
/**
|
||||
* 访问密钥ID
|
||||
* 阿里云AccessKey的ID部分
|
||||
* 用于标识用户身份
|
||||
*/
|
||||
private String accessKeyId;
|
||||
|
||||
/**
|
||||
* 访问密钥密钥
|
||||
* 阿里云AccessKey的密钥部分
|
||||
* 重要:需要妥善保管,避免泄露
|
||||
*/
|
||||
private String accessKeySecret;
|
||||
|
||||
/**
|
||||
* 绑定桶的访问域名
|
||||
* 用于生成文件访问URL的完整域名地址,支持以下形式:
|
||||
* <p>
|
||||
* 1. 默认OSS域名格式:
|
||||
* - HTTPS: https://{bucketName}.{endpoint}
|
||||
* - HTTP: http://{bucketName}.{endpoint}
|
||||
* 示例: https://yhzz-dev-nc.oss-cn-hangzhou.aliyuncs.com
|
||||
* <p>
|
||||
* 2. 自定义域名(推荐):
|
||||
* - 需要在阿里云OSS控制台绑定自定义域名
|
||||
* - 需要配置域名解析(CNAME记录)
|
||||
* 示例: https://oss.yunheng.com
|
||||
* <p>
|
||||
* 3. CDN加速域名:
|
||||
* - 通过CDN加速文件访问
|
||||
* - 需要配置CDN域名和回源设置
|
||||
* 示例: https://cdn.yunheng.com
|
||||
* <p>
|
||||
* 使用场景:
|
||||
* - 文件上传后生成完整的访问链接
|
||||
* - 前端页面直接显示图片、视频等文件
|
||||
* - 文件分享和下载
|
||||
* <p>
|
||||
* 配置建议:
|
||||
* - 生产环境建议使用自定义域名 + HTTPS
|
||||
* - 如果secure=true,域名应以https://开头
|
||||
* - 域名末尾不要包含斜杠(/)
|
||||
*/
|
||||
private String domainUrl;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user