本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

整合協同儲存EOS

更新時間:2024-10-08 20:39

協同儲存 EOS 提供了 API,您可以通過編程方式,在您的應用裡進行檔案上傳、下載等操作。

整合流程

使用者身份

建議您選擇RAM使用者或者RAM角色進行介面調用。更多關於使用者身份介紹請參見身份

授權

調用前,您需要為對應的身份授予權限原則,更多關於授權請參見授權管理

AliyunEnsFullAccess

該系統策略為ENS產品的讀寫策略,具有ENS產品下所有服務的操作許可權,請謹慎使用。

AliyunEnsEOSFullAccess

該系統策略為ENS邊緣協同儲存服務的讀寫權限,僅可操作ENS協同儲存服務。

調用方式

協同儲存EOS的大部分介面與OSS相容,同時EOS存取點和 OSS 稍有不同,使用的是固定網域名稱eos.aliyuncs.com,無需關注地區,同時也無需區分內網或外網(在內網訪問會自動切換到內網鏈路,不產生公網流量費用)。

由於EOS是非Region化的,極少數介面無法完全相容OSS,通過EOS OpenAPI的形式提供,關於EOS OpenAPI調用方式請參見整合概覽

下表列舉了EOS相容OSS API的情況,其中

  • 相容OSS的部分API,可以直接使用OSS SDK進行調用。

  • 不相容OSS的部分API,可以使用ENS SDK進行調用。

OpenAPI

描述

EOS OpenAPI

相容OSS API

OpenAPI

描述

EOS OpenAPI

相容OSS API

儲存空間

ListBuckets

返回要求者擁有的所有儲存空間

✔️

PutBucket

建立Bucket

✔️

DeleteBucket

刪除Bucket

✔️

✔️

GetBucketInfo

擷取Bucket的資訊

✔️

✔️

PutBucketLifecycle

設定Bucket中Object的生命週期規則

✔️

✔️

GetBucketLifecycle

查看Bucket中Object的生命週期規則

✔️

✔️

DeleteBucketLifecycle

刪除Bucket中Object的生命週期規則

✔️

✔️

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事件

✔️

參考樣本

建立儲存空間

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.alibabacloud.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")
                // 介面協議
                .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_);
        // 請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考,建議使用更安全的 STS 方式,更多鑒權訪問方式請參見:https://www.alibabacloud.com/help/sdk/developer-reference/credentials-1
        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 返回的狀態代碼 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";
        // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 初始化 OSS Cilent
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);   

        try {
            // 填寫Bucket名稱。
            String bucketName = "global-eos-test1";
            String objectName = "demoTestObject.txt";
            String content = "this is demo";    // 建立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文檔:簡單上傳

下載檔案

下載檔案請參見OSS文檔:下載檔案概述。您也可通過使用產生授權的URL下載檔案,詳情請參見:授權訪問

  • 本頁導讀 (1, M)
  • 整合流程
  • 使用者身份
  • 授權
  • 調用方式
  • 參考樣本
  • 建立儲存空間
  • 上傳檔案
  • 下載檔案
文檔反饋