文件客户端 API(FileClient API)
一、概述
FileClient 是一个抽象接口,用于统一不同对象存储服务(如阿里云OSS、华为云OBS、腾讯云COS、MinIO、又拍云等)的文件操作。通过工厂类 FileClientFactory 获取实例,支持多CDN配置。
(一)获取实例
// 获取默认客户端
FileClient fileClient = FileClientFactory.getClient();
// 根据cdnKey获取特定客户端(多CDN配置时使用)
FileClient fileClient = FileClientFactory.getClient("cdnKey");(二)配置示例:以阿里云OSS为例
cdn:
oss:
name: 阿里云
type: OSS
bucket: your-bucket-name
uploadUrl: oss-cn-hangzhou.aliyuncs.com
downloadUrl: oss-cn-hangzhou.aliyuncs.com
accessKeyId: your-access-key-id
accessKeySecret: your-access-key-secret
mainDir: upload/
validTime: 3600000 # 签名有效期(毫秒)
timeout: 600000 # 请求超时时间
active: true更多配置参考:文件存储配置
二、方法说明
(一)上传文件
1、upload(String fileName, byte[] data)
- 描述: 上传字节数组到OSS。
- 参数:
fileName: 文件名(包含路径)data: 文件内容的字节数组
- 返回:
CdnFile包含文件元数据和访问URL - 示例:
byte[] data = ...; // 文件内容
CdnFile cdnFile = fileClient.upload("path/file.txt", data);2、upload(String fileName, InputStream inputStream)
- 描述: 通过输入流上传文件。
- 参数:
fileName: 文件名(包含路径)inputStream: 文件输入流
- 返回:
CdnFile - 示例:
try (InputStream is = new FileInputStream("local.txt")) {
CdnFile cdnFile = fileClient.upload("path/file.txt", is);
}3、uploadByFileName(String fileName, byte[] data)
- 描述: 上传文件并返回下载URL。
- 返回: 文件下载URL(String)
- 示例:
String url = fileClient.uploadByFileName("path/image.png", imageData);4、uploadByFileName(String fileName, InputStream inputStream)
- 描述: 通过输入流上传文件并返回下载URL。
- 示例:
String url = fileClient.uploadByFileName("path/image.png", inputStream);(二)获取下载URL
1、getDownloadUrl(String fileName)
- 描述: 获取通过
uploadByFileName上传的文件的下载URL。 - 参数:
fileName- 上传时使用的文件名 - 返回: 完整的下载URL
- 示例:
String url = fileClient.getDownloadUrl("path/image.png");(三)删除操作
1、deleteByFolder(String folder)
- 描述: 删除指定文件夹下的所有文件。
- 参数:
folder- 文件夹路径 - 示例:
fileClient.deleteByFolder("temp/");2、deleteByFilename(String filename)
- 描述: 删除指定文件。
- 参数:
filename- 完整文件名(含路径) - 示例:
fileClient.deleteByFilename("path/file.txt");(四)文件检查
1、isExistByFilename(String filename)
- 描述: 检查文件是否存在。
- 返回:
true存在,false不存在 - 示例:
boolean exists = fileClient.isExistByFilename("path/file.txt");(五)获取静态资源URL
1、getStaticUrl()
- 描述: 获取静态资源根URL,根据配置决定是否使用CDN。
- 返回: URL字符串
- 示例:
String staticUrl = fileClient.getStaticUrl();三、完整示例
批量上传文件并获取URL
private static Map<String, String> uploadFiles(File directory) {
Map<String, String> result = new HashMap<>();
File[] files = directory.listFiles();
if (files == null) return result;
for (File file : files) {
try (FileInputStream is = new FileInputStream(file)) {
String fileName = "widget/" + file.getName();
fileClient.uploadByFileName(fileName, is);
String url = fileClient.getDownloadUrl(fileName);
result.put(file.getName(), url);
} catch (Exception e) {
throw new RuntimeException("Upload failed", e);
}
}
return result;
}四、数据结构 CdnFile
| 字段 | 类型 | 描述 |
|---|---|---|
| name | String | 文件名 |
| size | Long | 文件大小(字节) |
| type | String | 文件类型 |
| url | String | 文件完整访问URL |
五、注意事项
- 多CDN配置: 使用
FileClientFactory.getClient(String cdnKey)获取指定配置的客户端。 - 路径规范: 文件名建议包含路径(如
"images/avatar.jpg"),避免直接使用根目录。
六、支持的存储服务
| 服务商 | 类型标识 | 实现类 |
|---|---|---|
| 阿里云OSS | OSS | AliyunOSSClient |
| 华为云OBS | HUAWEI_OBS | HuaweiOBSClient |
| 本地存储 | LOCAL | LocalFileClient |
| MinIO | MINIO | MiniOssClient |
| 又拍云 | UPYUN | UpyunOSSClient |
| 腾讯云COS | TENCENT_COS | TencentCosClient |