阿里云OSS
⭐ X-File-Storage
文件上传万能工具,一行代码将文件存储到本地、FTP、SFTP、WebDAV、阿里云 OSS、华为云 OBS、七牛云 Kodo、腾讯云 COS、百度云 BOS、又拍云 USS、MinIO、 Amazon S3、GoogleCloud Storage、FastDFS、 Azure Blob Storage、Cloudflare R2、金山云 KS3、美团云 MSS、京东云 OSS、天翼云 OOS、移动 云 EOS、沃云 OSS、 网易数帆 NOS、Ucloud US3、青云 QingStor、平安云 OBS、首云 OSS、IBM COS、其它兼容 S3 协议的存储平台
官网:https://x-file-storage.xuyanwu.cn/#/
基于若依框架得操作示例文档:https://ai.feishu.cn/docx/LPsjdeyMxoad2FxHFcOcSkLHn1e
阿里云 OSS
配置类
java
@Setter
@Getter
@NoArgsConstructor
@ToString
@Configuration
@ConfigurationProperties(prefix = "zzyl.framework.oss")
public class AliOssConfigProperties {
/**
* 域名站点
*/
private String endpoint ;
/**
* 秘钥Id
*/
private String accessKeyId ;
/**
* 秘钥
*/
private String accessKeySecret ;
/**
* 桶名称
*/
private String bucketName ;
}创建链接
java
@Slf4j
@Configuration
public class OssAliyunAutoConfig {
@Autowired
AliOssConfigProperties aliOssConfigProperties;
@Bean
public OSS ossClient(){
log.info("-----------------开始创建OSSClient--------------------");
OSS ossClient = new OSSClientBuilder().build(aliOssConfigProperties.getEndpoint(),
aliOssConfigProperties.getAccessKeyId(), aliOssConfigProperties.getAccessKeySecret());
//判断容器是否存在,不存在就创建
if (!ossClient.doesBucketExist(aliOssConfigProperties.getBucketName())) {
ossClient.createBucket(aliOssConfigProperties.getBucketName());
CreateBucketRequest createBucketRequest = new CreateBucketRequest(aliOssConfigProperties.getBucketName());
//设置问公共可读
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
ossClient.createBucket(createBucketRequest);
}
//添加客户端访问日志
SetBucketLoggingRequest request = new SetBucketLoggingRequest(aliOssConfigProperties.getBucketName());
// 设置存放日志文件的存储空间。
request.setTargetBucket(aliOssConfigProperties.getBucketName());
// 设置日志文件存放的目录。
request.setTargetPrefix(aliOssConfigProperties.getBucketName());
ossClient.setBucketLogging(request);
log.info("-----------------结束创建OSSClient--------------------");
return ossClient;
}
}文件上传
java
@Slf4j
@Component
public class OSSAliyunFileStorageService {
@Autowired
OSS ossClient;
@Autowired
AliOssConfigProperties aliOssConfigProperties;
/**
* 上传文件
*
* @param objectName 文件名
* @param inputStream 文件流对象
* @return
*/
public String store(String objectName, InputStream inputStream) {
//文件读取路径
String url = null;
// 判断文件
if (inputStream == null) {
log.error("上传文件:objectName{}文件流为空", objectName);
return url;
}
log.info("OSS文件上传开始:{}", objectName);
try {
String bucketName = aliOssConfigProperties.getBucketName();
// 上传文件
PutObjectRequest request = new PutObjectRequest(bucketName, objectName, inputStream);
PutObjectResult result = ossClient.putObject(request);
// 设置权限(公开读)
ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
if (result != null) {
log.info("OSS文件上传成功:{}", objectName);
}
} catch (OSSException oe) {
log.error("OSS文件上传错误:{}", oe);
} catch (ClientException ce) {
log.error("OSS文件上传客户端错误:{}", ce);
}
//文件访问路径规则 https://BucketName.Endpoint/ObjectName
StringBuilder stringBuilder = new StringBuilder("https://");
stringBuilder
.append(aliOssConfigProperties.getBucketName())
.append(".")
.append(aliOssConfigProperties.getEndpoint())
.append("/")
.append(objectName);
log.info("文件上传到:{}", stringBuilder.toString());
return stringBuilder.toString();
}
/**
* 根据url删除文件
*
* @param pathUrl url地址(全路径)
*/
public void delete(String pathUrl) {
String prefix = "https://" + aliOssConfigProperties.getBucketName() + "." + aliOssConfigProperties.getEndpoint() + "/";
String key = pathUrl.replace(prefix, "");
List<String> keys = Lists.newArrayList();
keys.add(key);
// 删除Objects
ossClient.deleteObjects(new DeleteObjectsRequest(aliOssConfigProperties.getBucketName()).withKeys(keys));
}
}