官网/product/oss第一句话:
“对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全和高可靠的云存储服务。RESTFul API的平台无关性,容量和处理能力的弹性扩展,按实际容量付费真正使您专注于核心业务。”
当项目在使用的过程中会产生一些文件并需要存储,而自己的服务器容量不足够大来存储这些文件,这个时候就可以选择阿里云的对象存储服务。当然这是我的使用场景,你也可以参考官网的使用场景。
使用前提在“快速入门”里写得有,你需要开通服务并创建资源空间。
使用方法SDK手册中已经写得非常清楚了:/document_detail/?spm=5176.doc32013.6.305.MD4X5m
“在OSS中,用户操作的基本数据单元是文件(Object)。OSS Java SDK提供了丰富的文件上传接口,可以通过以下方式上传文件:
1.流式上传
2.文件上传
3.追加上传
4.分片上传
5.断点续传上传”
我采用的是文件上传方式:
需要的jar包
<dependency>
<groupId></groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.2.3</version>
</dependency>
首先你需要一个OSSClient,里面的keyId以及keySecret是你在开通服务的时候获得的;OSS是没有文件夹这个概念的,所有元素都是以Object来存储,代码中的myKey或keys是你上传的Object的完整的键名称,比如你上传到 test/myWord/ 里面,那么你的myKey就是“test/myWord/”,不管你本地的文件名称是什么,上传到云端之后的对象名称就是你的myKey的名称;OSS允许用户自定义Http header,在上传文件的方法中,设置了上传内容类型以及上传文件长度,之前看到一篇文章,是说这个云服务是按照量来计费的,所以需要告知它你要上传的内容长度,但是如果我不设置长度,貌似也能上传成功,原因还不清楚:
/**
* OSSClient
*
* @author andy
* @date 2016年8月31日
*/
public class OSSClientUtil {
// 访问OSS的域名, endpoint以上海为例,其它region请按实际情况填写
private static String endpoint = "";
private static String accessKeyId = "<yourAccessKeyId>";
private static String accessKeySecret = "<yourAccessKeySecret>";
private static String bucketName = "<yourBucketName>";
//getter/setter方法略
}
在上传文件的时候,你需要先创建OSSClient实例,然后调用上传文件的方法。
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
/**
* 从云端上传下载查询删除文件
*
* @author andy
* @date 2016年8月31日
*/
public class FileLoadUtil {
/**
* 文件上传
*
* @param myKey
* @param file 要上传的文件
*/
public static void upLoadFileToALiyun(String myKey, File file) {
// 创建OSSClient实例
OSSClient ossClient = new OSSClient((), (), ());
// 创建上传Object的Metadata
ObjectMetadata meta = new ObjectMetadata();
// 设置上传内容类型docx
("application/");
// 设置上传文件长度
(());
// 上传文件
try {
PutObjectResult m_Result = ((), myKey, file, meta);
(m_Result.getETag());
} catch (OSSException oe) {
();
throw new OSSException();
} catch (ClientException ce) {
();
throw new ClientException();
} catch (Exception e) {
();
} finally {
();// 关闭client
}
}
/**
* 文件下载
*
* @param myKey
* @param tempFileName 要下载的文件名
* @throws Exception
*/
public static void downloadFileFromALiyun(String myKey, String tempFileName) throws Exception {
// 创建OSSClient实例
OSSClient ossClient = new OSSClient((), (), ());
InputStream inputStream = null;
// 下载object到文件
try {
OSSObject ossObject = (new GetObjectRequest((), myKey));
inputStream = ();
String newStr = new String((), "UTF-8");
File f = new File(newStr);
(inputStream, f);
} catch (OSSException oe) {
();
throw new Exception(());
} catch (ClientException ce) {
();
throw new Exception(());
} catch (Exception e) {
();
throw new Exception(());
} finally {
();// 关闭client
(inputStream);
}
}
// 查看Bucket中的Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
public static void queryObject() {
// 创建OSSClient实例
OSSClient ossClient = new OSSClient((), (), ());
try {
// 要查找的文件
ObjectListing objectListing = ((), "yourObjectKey/");
List<OSSObjectSummary> objectSummary = ();
("您有以下Object:");
for (OSSObjectSummary object : objectSummary) {
("\t" + ());
}
} catch (OSSException oe) {
();
} catch (ClientException ce) {
();
} catch (Exception e) {
();
} finally {
();// 关闭client
}
}
// 删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
public static void deleteSingleObect(String myKey) {
//创建OSSClient实例
OSSClient ossClient = new OSSClient((), (), ());
try {
((), myKey);
} catch (OSSException oe) {
();
} catch (ClientException ce) {
();
} catch (Exception e) {
();
} finally {
();// 关闭client
}
}
/**
* 批量删除object
*/
public static void deleteBatchObect(List<String> keys) {
// 删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
OSSClient ossClient = new OSSClient((), (), ());
try {
// 删除Objects
DeleteObjectsResult deleteObjectsResult = (new DeleteObjectsRequest(()).withKeys(keys));
List<String> deletedObjects = ();
} catch (OSSException oe) {
();
} catch (ClientException ce) {
();
} catch (Exception e) {
();
} finally {
();// 关闭client
}
}
public static boolean doesObjectExist(String myKey) {
OSSClient ossClient = new OSSClient((), (), ());
boolean found = false;
try {
found = ((), myKey);
} catch (OSSException oe) {
();
} catch (ClientException ce) {
();
} catch (Exception e) {
();
} finally {
();// 关闭client
}
return found;
}
public static void main(String[] args) {
// queryObject();
// deleteBatchObect();
// (doesObjectExist("yourObjectKey/"));
}
}