協(xié)同存儲 EOS 提供了 API,您可以通過編程方式,在您的應用里進行文件上傳、下載等操作。
集成流程
用戶身份
建議您選擇RAM用戶或者RAM角色進行接口調用。更多關于用戶身份介紹請參見身份。
授權
調用前,您需要為對應的身份授予權限策略,更多關于授權請參見授權管理。
AliyunEnsFullAccess
該系統(tǒng)策略為ENS產品的讀寫策略,具有ENS產品下所有服務的操作權限,請謹慎使用。
AliyunEnsEOSFullAccess
該系統(tǒng)策略為ENS邊緣協(xié)同存儲服務的讀寫權限,僅可操作ENS協(xié)同存儲服務。
調用方式
協(xié)同存儲EOS的大部分接口與OSS兼容,同時EOS接入點和 OSS 稍有不同,使用的是固定域名eos.aliyuncs.com
,無需關注地域,同時也無需區(qū)分內網或外網(在內網訪問會自動切換到內網鏈路,不產生公網流量費用)。
由于EOS是非Region化的,極少數接口無法完全兼容OSS,通過EOS OpenAPI的形式提供,關于EOS OpenAPI調用方式請參見集成概覽。
下表列舉了EOS兼容OSS API的情況,其中
OpenAPI | 描述 | EOS OpenAPI | 兼容OSS API |
存儲空間 | |||
ListBuckets | 返回請求者擁有的所有存儲空間 | ?? | ? |
PutBucket | 創(chuàng)建Bucket | ?? | ? |
DeleteBucket | 刪除Bucket | ?? | ?? |
GetBucketInfo | 獲取Bucket的信息 | ?? | ?? |
PutBucketLifecycle | 設置Bucket中Object的生命周期規(guī)則 | ?? | ?? |
GetBucketLifecycle | 查看Bucket中Object的生命周期規(guī)則 | ?? | ?? |
DeleteBucketLifecycle | 刪除Bucket中Object的生命周期規(guī)則 | ?? | ?? |
PutBucketAcl | 設置Bucket訪問權限 | ?? | ?? |
GetBucketAcl | 獲取Bucket訪問權限 | ?? | ?? |
文件對象 | |||
DeleteObject | 刪除單個文件 | ?? | ?? |
PutObject | 上傳Object | ? | ?? |
GetObject | 獲取(下載)Object | ? | ?? |
AppendObject | 以追加寫的方式上傳Object | ? | ?? |
DeleteMultipleObjects | 刪除多個Object | ? | ?? |
CopyObject | 復制Object(僅支持同一bucket之內的文件拷貝) | ? | ?? |
PutObjectTagging | 設置或更新對象的標簽信息 | ? | ?? |
GetObjectTagging | 獲取對象的標簽信息 | ? | ?? |
DeleteObjectTagging | 刪除指定對象的標簽信息 | ? | ?? |
HeadObject | 只返回某個Object的meta信息,不返回文件內容 | ? | ?? |
GetObjectMeta | 返回Object的基本meta信息,包括該Object的ETag、Size(文件大小)以及LastModified等,不返回文件內容 | ? | ?? |
分片上傳 | |||
InitiateMultipartUpload | 初始化MultipartUpload事件 | ? | ?? |
UploadPart | 分塊上傳文件 | ? | ?? |
CompleteMultipartUpload | 完成整個文件的MultipartUpload上傳 | ? | ?? |
AbortMultipartUpload | 取消MultipartUpload事件 | ? | ?? |
參考示例
創(chuàng)建存儲空間
EOS的OpenAPI暫時只能通過Common模式進行調用。
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
/**
* 使用AK&SK初始化賬號Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static com.aliyun.teaopenapi.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,您的 AccessKey ID
.setAccessKeyId(accessKeyId)
// 必填,您的 AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// Endpoint 請參考 https://api.aliyun.com/product/Ens
config.endpoint = "ens.aliyuncs.com";
return new com.aliyun.teaopenapi.Client(config);
}
/**
* API 相關
* @param path params
* @return OpenApi.Params
*/
public static com.aliyun.teaopenapi.models.Params createApiInfo() throws Exception {
com.aliyun.teaopenapi.models.Params params = new com.aliyun.teaopenapi.models.Params()
// 接口名稱
.setAction("PutBucket")
// 接口版本
.setVersion("2017-11-10")
// 接口協(xié)議
.setProtocol("HTTPS")
// 接口 HTTP 方法
.setMethod("POST")
.setAuthType("AK")
.setStyle("RPC")
// 接口 PATH
.setPathname("/")
// 接口請求體內容格式
.setReqBodyType("json")
// 接口響應體內容格式
.setBodyType("json");
return params;
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
// 請確保代碼運行環(huán)境設置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// 工程代碼泄露可能會導致 AccessKey 泄露,并威脅賬號下所有資源的安全性。以下代碼示例僅供參考,建議使用更安全的 STS 方式,更多鑒權訪問方式請參見:http://bestwisewords.com/document_detail/378657.html
com.aliyun.teaopenapi.Client client = Sample.createClient(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
com.aliyun.teaopenapi.models.Params params = Sample.createApiInfo();
// body params
java.util.Map<String, Object> body = new java.util.HashMap<>();
// bucket名稱
body.put("BucketName", "global-eos-test1");
// bucket權限類型
body.put("BucketAcl", "private");
// runtime options
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
com.aliyun.teaopenapi.models.OpenApiRequest request = new com.aliyun.teaopenapi.models.OpenApiRequest().setBody(body);
// 復制代碼運行請自行打印 API 的返回值
// 返回值為 Map 類型,可從 Map 中獲得三類數據:響應體 body、響應頭 headers、HTTP 返回的狀態(tài)碼 statusCode。
java.util.Map<String, ?> resp = client.callApi(params, request, runtime);
com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resp));
}
}
上傳文件
文件對象API完全兼容OSS API,可以直接使用OSS SDK進行調用。
示例代碼
package com.aliyun.sample;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import com.aliyuncs.ens.model.v20171110.*;
import java.io.ByteArrayInputStream;
public class Demo {
public static void main(String[] args) throws Exception {
String endpoint = "http://eos.aliyuncs.com";
// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 初始化 OSS Cilent
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// 填寫B(tài)ucket名稱。
String bucketName = "global-eos-test1";
String objectName = "demoTestObject.txt";
String content = "this is demo"; // 創(chuàng)建PutObjectRequest對象。
// 上傳字符串。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
ossClient.putObject(putObjectRequest);
// 關閉OSSClient
ossClient.shutdown();
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason: ", e.);
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
詳情請參見OSS文檔:簡單上傳。