写在前面。不得不说,有关天翼云oss的相关资料真的是少得可怜,官网甚至连go版本的SDK 都没有!!!可能是用的人太少了吧。毕竟前有阿里云oss,后又华为云oss,还有其他各种各样的云,天翼云竞争力不强,资料就少。
首先是使用maven导入相关jar包。再次吐槽,天翼云连个maven中央仓库都没得!!!可想而知是多么小众。我是自己在官网把jar包下下来,网址在这里https://www.ctyun.cn/help2/10000101/10001740
选择Java版本,如下图
将下下来的文件解压,然后丢到公司的中央仓库(如何将jar包发布到远程仓库有很多教程,不多赘述)。
<dependency>
<groupId>cn.ctyun</groupId>
<artifactId>ctyun-sdk-oss</artifactId>
<version>6.5.0</version>
</dependency>
导入相关jar包后接下来是代码部分。
首先是获取客户端,获取客户端有很多方法,在截图里面的开发者指南里有很多详细介绍,在此只列举一种方法。如下:
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.PropertiesCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
public AmazonS3 getClient() {
ClientConfiguration clientConfig = new ClientConfiguration();
clientConfig.setConnectionTimeout(30 * 1000); //设置连接的超时时间,单位毫秒
clientConfig.setSocketTimeout(30 * 1000); //设置socket超时时间,单位毫秒
clientConfig.setProtocol(Protocol.HTTP); //设置http
//负载是否参与签名、设置为参与
S3ClientOptions options = new S3ClientOptions();
options.setPayloadSigningEnabled(true);
//创建client对象
AmazonS3 ossClient = new AmazonS3Client(
new PropertiesCredentials(params.getAccesskeyid(), params.getAccesskeysecret()), clientConfig);
// 设置endpoint
ossClient.setEndpoint(params.getEndpoint());
//设置选项
ossClient.setS3ClientOptions(options);
return ossClient;
}
其中创建客户端需要params.getAccesskeyid(), params.getAccesskeysecret(),params.getEndpoint()
这三个参数。这三个参数分别代表天翼云客户端的accesskeyid、accesskeysecret和endpoint,相关术语可以参考开发者文档去理解。
接下来是上传文件,如下:
import java.io.InputStream;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.ObjectMetadata;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import com.amazonaws.AmazonClientException;
public String uploadFile(InputStream fileContent, String remotePath, String fileName) {
AmazonS3 ossClient = getClient();
// 定义二级目录
String remoteFilePath = remotePath.substring(0, remotePath.length()).replaceAll("\\\\", "/") + "/";
// 创建上传Object的Metadata
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setCacheControl("no-cache");
objectMetadata.setHeader("Pragma", "no-cache");
String path = remoteFilePath + fileName;
try {
objectMetadata.setContentLength(fileContent.available());
// 上传文件
logger.info("开始上传文件到oss");
ossClient.putObject(params.getBucket(), path, fileContent, objectMetadata);
} catch (Exception e) {
logger.error("上传文件到oss失败");
} finally {
if (ossClient != null) {
((AmazonS3Client) ossClient).shutdown();
}
if (fileContent != null) {
try {
fileContent.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return path;
}
上传文件出了需要创建客户端的三个参数外,还需要bucketName参数,即params.getBucket()
,也就是天翼云oss的桶(桶的概念可以参考开发者文档),删除文件下同。
删除文件,如下:
public boolean deleteFile(String filePath, String fileName) {
AmazonS3 ossClient = getClient();
String path = filePath + fileName;
boolean exist = ossClient.doesBucketExist(params.getBucket());
if (!exist) {
logger.error("从OSS存储删除的文件不存在,path={}", path);
return false;
} else {
try {
ossClient.deleteObject(params.getBucket(), path);
} catch (Exception e) {
logger.error("从天翼云OSS删除文件出错,path={}", path, e);
return false;
} finally {
if (ossClient != null) {
try {
((AmazonS3Client) ossClient).shutdown();
} catch (AmazonClientException e) {
e.printStackTrace();
}
}
}
return true;
}
天翼云用的人的确是不多,很多实现还是需要参考开发者文档。