默認情況下,OSS存儲空間中文件的讀寫權限是私有,僅文件擁有者具有訪問文件的權限。但是,文件擁有者可以通過創建簽名URL的方式與第三方用戶分享文件,簽名URL使用安全憑證的方式授權第三方用戶在指定時間內下載或者預覽文件。
注意事項
生成簽名URL過程中,SDK利用本地存儲的密鑰信息,根據特定算法計算出簽名(signature),然后將其附加到URL上,以確保URL的有效性和安全性。這一系列計算和構造URL的操作都是在客戶端完成,不涉及網絡請求到服務端。因此,生成簽名URL時不需要授予調用者特定權限。但是,為避免第三方用戶無法對簽名URL授權的資源執行相關操作,需要確保調用生成簽名URL接口的身份主體被授予對應的權限。
例如,通過簽名URL下載或預覽文件時,需要授予
oss:GetObject
權限。如需確保通過文件URL訪問文件時是預覽行為,您需要綁定自定義域名并添加CNAME記錄。詳情請參見綁定自定義域名至Bucket默認域名。
獲取私有文件URL時涉及設置URL的有效時長。超出文件URL設置的有效時長后,通過文件URL訪問時會提示簽名URL已過期,導致無法正常訪問文件。如果您希望繼續訪問該文件,需要選擇以下任意方式重新獲取簽名URL。
獲取單個文件的URL
私有文件
如果文件讀寫權限ACL為私有,則必須進行簽名操作。私有文件URL的格式為https://BucketName.Endpoint/Object?簽名參數
。您可以通過以下任意方法獲取文件URL并設置URL的有效時長。
文件URL的有效時長因賬號類型存在差異。例如,阿里云賬號通過OSS控制臺可設置的文件URL有效時長最大為32400秒(9小時),RAM用戶以及STS用戶可設置的文件URL有效時長最大為3600秒(1小時)。如需獲取更長時效的文件URL,請使用命令行工具ossutil、圖形化管理工具ossbrowser或阿里云SDK。更多信息,請參見私有文件簽名URL有效時長。
使用OSS控制臺
您可以通過OSS控制臺獲取單個文件的URL。
登錄OSS管理控制臺。
單擊Bucket列表,然后單擊目標Bucket名稱。
在左側導航欄,選擇
。獲取文件URL。
單擊目標文件名稱。
在詳情面板配置以下參數,然后單擊復制文件 URL。
參數
說明
過期時間
當目標文件為私有文件時,需設置文件URL的有效時間。
取值范圍:60~32400
單位:秒
如果您希望設置更長過期時間的文件URL,您可以使用ossbrowser、sdk、ossutil等工具。
自有域名
如需確保第三方訪問圖片或網頁文件時是預覽行為,請使用Bucket綁定的自定義域名生成文件URL。
僅當Bucket綁定自定義域名后可配置此項。更多信息,請參見綁定自定義域名。
使用HTTPS
默認使用HTTPS協議生成文件URL。如需使用HTTP協議生成文件URL,請關閉使用HTTPS開關。
使用圖形化管理工具ossbrowser
ossbrowser支持Object級別的操作與控制臺支持的操作類似,請按照ossbrowser界面指引完成獲取簽名URL的操作。關于如何使用ossbrowser,請參見快速使用ossbrowser。
使用阿里云SDK
以下僅列舉常見SDK的生成簽名URL并使用簽名URL下載文件的代碼示例。關于其他SDK的生成簽名URL并使用簽名URL下載文件的代碼示例,請參見SDK簡介。
Java
生成下載文件的簽名URL。
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.model.GeneratePresignedUrlRequest; import java.net.URL; import java.util.Date; public class Demo { public static void main(String[] args) throws Throwable { // 以華東1(杭州)的外網Endpoint為例,其它Region請按實際情況填寫。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // 填寫Bucket名稱,例如examplebucket。 String bucketName = "examplebucket"; // 填寫Object完整路徑,例如exampleobject.txt。Object完整路徑中不能包含Bucket名稱。 String objectName = "exampleobject.txt"; // 創建OSSClient實例。 OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); URL signedUrl = null; try { // 指定生成的簽名URL過期時間,單位為毫秒。本示例以設置過期時間為1小時為例。 Date expiration = new Date(new Date().getTime() + 3600 * 1000L); // 生成簽名URL。 GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET); // 設置過期時間。 request.setExpiration(expiration); // 通過HTTP GET請求生成簽名URL。 signedUrl = ossClient.generatePresignedUrl(request); // 打印簽名URL。 System.out.println("signed url for getObject: " + signedUrl); } 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."); 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()); } } }
使用簽名URL下載文件。
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import java.io.*; import java.util.*; public class Get1 { public static void main(String[] args) throws Throwable { // 填寫下載到本地文件的完整路徑。 String pathName = "D:\\example.jpg"; // 填寫步驟1生成的簽名URL。 String signedUrl= "yourSignedUrl"; Map<String, String> headers = new HashMap<String, String>(); Map<String, String> userMetadata = new HashMap<String, String>(); // 通過簽名URL下載文件,以HttpClients為例說明。 getObjectWithHttp(signedUrl, pathName, headers, userMetadata); } public static void getObjectWithHttp(String signedUrl, String pathName, Map<String, String> headers, Map<String, String> userMetadata) throws IOException { CloseableHttpClient httpClient = null; CloseableHttpResponse response = null; try { HttpGet get = new HttpGet(signedUrl); // 如果生成簽名URL時設置了header參數,例如用戶元數據,存儲類型等,則調用簽名URL下載文件時,也需要將這些參數發送至服務端。如果簽名和發送至服務端的不一致,會報簽名錯誤。 for(Map.Entry header: headers.entrySet()){ get.addHeader(header.getKey().toString(),header.getValue().toString()); } for(Map.Entry meta: userMetadata.entrySet()){ // 如果使用userMeta,sdk內部會為userMeta拼接"x-oss-meta-"前綴。當您使用其他方式生成簽名URL進行下載時,userMeta也需要拼接"x-oss-meta-"前綴。 get.addHeader("x-oss-meta-"+meta.getKey().toString(), meta.getValue().toString()); } httpClient = HttpClients.createDefault(); response = httpClient.execute(get); System.out.println("返回下載狀態碼:"+response.getStatusLine().getStatusCode()); if(response.getStatusLine().getStatusCode() == 200){ System.out.println("使用網絡庫下載成功"); } System.out.println(response.toString()); saveFileToLocally(response.getEntity().getContent(), pathName); } catch (Exception e){ e.printStackTrace(); } finally { response.close(); httpClient.close(); } } public static void saveFileToLocally(InputStream inputStream, String pathName) throws IOException { DataInputStream in = null; OutputStream out = null; try { in = new DataInputStream(inputStream); out = new DataOutputStream(new FileOutputStream(pathName)); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) { out.write(bufferOut, 0, bytes); } } catch (Exception e){ e.printStackTrace(); } finally { in.close(); out.close(); } } }
PHP
生成下載文件的簽名URL。
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\Credentials\EnvironmentVariableCredentialsProvider; use OSS\OssClient; use OSS\Core\OssException; use OSS\Http\RequestCore; use OSS\Http\ResponseCore; // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 $provider = new EnvironmentVariableCredentialsProvider(); // yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。 $endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 填寫Bucket名稱,例如examplebucket。 $bucket= "examplebucket"; // 填寫不包含Bucket名稱在內的Object完整路徑。 $object = "exampleobject.txt"; // 設置簽名URL的有效時長為3600秒。 $timeout = 3600; // 生成下載的簽名URL。 $options = array( "response-content-disposition"=>"attachment", ); try { $config = array( "provider" => $provider, "endpoint" => $endpoint, ); $ossClient = new OssClient($config); $signedUrl = $ossClient->signUrl($bucket, $object, $timeout,'GET',$options); } catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");
使用簽名URL下載文件。
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\Http\RequestCore; use OSS\Http\ResponseCore; // 填寫步驟1生成的簽名URL。 $signedUrl = 'yourSignedUrl'; // 填寫下載到本地文件的完整路徑。 $localfile = "D://example.txt"; // 使用簽名URL下載文件。 $request = new RequestCore($signedUrl); // 生成的簽名URL默認以GET方式訪問。 $request->set_method('GET'); $request->add_header('Content-Type', ''); $request->send_request(); $res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code()); if ($res->isOK()) { print(__FUNCTION__ . ": OK" . "\n"); file_put_contents($localfile,$request->get_response_body()); } else { print(__FUNCTION__ . ": FAILED" . "\n"); };
Node.js
生成下載文件的簽名URL。
const OSS = require("ali-oss"); const client = new OSS({ // yourRegion填寫Bucket所在地域。以華東1(杭州)為例,yourRegion填寫為oss-cn-hangzhou。 region: "oss-cn-hangzhou", // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, // 填寫Bucket名稱,例如examplebucket。 bucket: "examplebucket", }); // 生成用于下載文件的簽名URL,并指定簽名URL的過期時間為3600秒。 const url = client.signatureUrl("exampleobject.txt", { expires: 3600 }); console.log(url);
通過簽名URL下載文件。
const axios = require("axios"); const fs = require("fs"); // 填寫步驟1生成的簽名URL。 const url = "yourSignedUrl"; // 填寫下載到本地文件的完整路徑。 const file = "D://example.txt"; axios // 設置響應類型為arraybuffer。 .get(url, { responseType: "arraybuffer" }) .then((response) => { fs.writeFile(file, response.data, (err) => { if (err) { console.log(err); } else { console.log("文件下載成功"); } }); }) .catch((error) => { console.log(error); });
Python
生成下載文件的簽名URL。
# -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider import requests # 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。 # 填寫Bucket名稱,例如examplebucket。 bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket') # 填寫Object完整路徑,例如exampledir/exampleobject.txt。Object完整路徑中不能包含Bucket名稱。 object_name = 'exampleobject.txt' # 生成下載文件的簽名URL,有效時間為3600秒。 # 設置slash_safe為True,OSS不會對Object完整路徑中的正斜線(/)進行轉義,此時生成的簽名URL可以直接使用。 url = bucket.sign_url('GET', object_name, 3600, slash_safe=True) print('簽名URL的地址為:', url)
通過簽名URL下載文件。
# -*- coding: utf-8 -*- import oss2 import requests # 填寫步驟1生成的簽名URL。 url = 'yourSignedUrl' # 通過簽名URL下載文件,以requests為例說明。 resp = requests.get(url) # 填寫下載到本地文件的完整路徑。 with open("D:\\examplefile.txt", "wb") as code: code.write(resp.content)
Browser.js
生成下載文件的簽名URL。
const OSS = require("ali-oss"); const STS = require("ali-oss").STS; // const cors = require("cors"); const stsClient = new STS({ // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, }); // 填寫存儲空間名稱,例如examplebucket。 const bucket = "examplebucket"; // yourRegion填寫Bucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。 const region = "oss-cn-hangzhou"; // 指定角色ARN。 const roleArn = "acs:ram::137918634953****:role/ossram"; const getSts = () => { stsClient .assumeRole( roleArn, `{ "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": [ "acs:oss:*:*:examplebucket/*" ] } ] }`, 3000 //指定SecurityToken過期時間,單位為秒。 ) .then((r) => { console.log("send:", r.credentials); const { SecurityToken, AccessKeyId, AccessKeySecret } = r.credentials; const client = new OSS({ bucket, region, accessKeyId: AccessKeyId, accessKeySecret: AccessKeySecret, stsToken: SecurityToken, refreshSTSTokenInterval: 9000, }); // 生成下載文件的簽名URL。 const url = client.asyncSignatureUrl("exampleobject.txt", { expires: 3600, method: "GET", }); console.log("url:", url); // client.get("exampleobject.txt", Buffer.from("body")).then((res) => { // console.log("res", res.url); // }); }); }; getSts();
使用簽名URL下載文件。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> </head> <body> <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script> <script> // 填寫步驟1生成的簽名URL。 const url = "yourSignedUrl"; var xhr = new XMLHttpRequest(); xhr.open("GET", url, true); // 設置響應類型為blob。 xhr.responseType = "blob"; xhr.onload = function () { if (xhr.status === 200) { const blob = xhr.response; const reader = new FileReader(); reader.onloadend = function () { const fileData = reader.result; // 自定義下載到本地文件的名稱。 const file = new File([fileData], "examplefile.txt"); const a = document.createElement("a"); a.href = URL.createObjectURL(file); a.download = file.name; a.click(); }; reader.readAsArrayBuffer(blob); } else { console.log("請求失敗"); } }; xhr.send(); </script> </body> </html>
Android
生成下載文件的簽名URL。
// 填寫Bucket名稱,例如examplebucket。 String bucketName = "examplebucket"; // 填寫不包含Bucket名稱在內源Object的完整路徑,例如exampleobject.txt。 String objectKey = "exampleobject.txt"; String url = null; try { // 生成用于下載文件的簽名URL。 GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectKey); // 設置簽名URL的過期時間為30分鐘。 request.setExpiration(30*60); request.setMethod(HttpMethod.GET); url = oss.presignConstrainedObjectURL(request); Log.d("url", url); } catch (ClientException e) { e.printStackTrace(); }
通過簽名URL下載文件。
// 填寫生成的簽名URL。 String url = ""; OkHttpClient client = new OkHttpClient(); // 通過簽名URL下載文件。 Request getRequest = new Request.Builder() .url(url) .get() .build(); client.newCall(getRequest).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.code() == 203 || response.code() >= 300) { Log.d("download", "fail"); Log.d("download", response.body().string()); return; } // 請求成功。 InputStream inputStream = response.body().byteStream(); byte[] buffer = new byte[2048]; int len; while ((len = inputStream.read(buffer)) != -1) { // 處理下載的數據,例如圖片展示或者寫入文件等。 } } });
Go
生成下載文件的簽名URL。
package main import ( "fmt" "github.com/aliyun/aliyun-oss-go-sdk/oss" "os" ) func HandleError(err error) { fmt.Println("Error:", err) os.Exit(-1) } func main() { // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 創建OSSClient實例。 // yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。 client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 填寫Bucket名稱,例如examplebucket。 bucketName := "examplebucket" // 填寫文件完整路徑,例如exampledir/exampleobject.txt。文件完整路徑中不能包含Bucket名稱。 objectName := "exampledir/exampleobject.txt" // 將Object下載到本地文件,并保存到指定的本地路徑中。如果指定的本地文件存在會覆蓋,不存在則新建。 bucket, err := client.Bucket(bucketName) if err != nil { HandleError(err) } // 生成用于下載的簽名URL,并指定簽名URL的有效時間為60秒。 signedURL, err := bucket.SignURL(objectName, oss.HTTPGet, 60) if err != nil { HandleError(err) } fmt.Printf("Sign Url:%s\n", signedURL) }
使用簽名URL下載文件。
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 創建OSSClient實例。 // yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。 client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 填寫Bucket名稱,例如examplebucket。 bucketName := "examplebucket" // 填寫本地文件完整路徑。 localDownloadedFilename := "D://example.txt" bucket, err := client.Bucket(bucketName) if err != nil { HandleError(err) } // 填寫步驟1獲取的簽名URL。 signedURL := "yourSignedUrl" // 使用簽名URL將OSS文件下載到本地文件。 err = bucket.GetObjectToFileWithURL(signedURL, localDownloadedFilename) if err != nil { HandleError(err) } } func HandleError(err error) { fmt.Println("Error:", err) os.Exit(-1) }
iOS
生成下載文件的簽名URL。
// 填寫Bucket名稱。 NSString *bucketName = @"examplebucket"; // 填寫Object名稱。 NSString *objectKey = @"exampleobject.txt"; __block NSString *urlString; // 生成用于下載的簽名URL,并指定簽名URL過期時間為30分鐘。 OSSTask *task = [client presignConstrainURLWithBucketName:bucketName withObjectKey:objectKey httpMethod:@"GET" withExpirationInterval:30 * 60 withParameters:@{}]; [task continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) { if (task.error) { NSLog(@"presign error: %@", task.error); } else { urlString = task.result; NSLog(@"url: %@", urlString); } return nil; }];
使用簽名URL下載文件。
// 使用簽名URL下載文件。 NSURL * url = [NSURL URLWithString:urlString]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; NSURLSession * session = [NSURLSession sharedSession]; NSURLSessionTask * sessionTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if (error) { NSLog(@"download error: %@", error); return; } else if (((NSHTTPURLResponse*)response).statusCode == 203 || ((NSHTTPURLResponse*)response).statusCode >= 300) { NSString *body = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"download error: %@", body); return; } NSLog(@"download success"); }]; [sessionTask resume];
使用命令行工具ossutil
關于使用ossutil生成簽名URL的具體操作, 請參見sign(生成簽名URL)。
公共讀文件
如果文件的讀寫權限ACL為公共讀,即該文件允許匿名訪問,則文件URL的格式為https://BucketName.Endpoint/ObjectName
。其中,ObjectName需填寫包含文件夾以及文件后綴在內的該文件的完整路徑。各地域的Endpoint信息介紹,請參見訪問域名和數據中心。
例如華東1(杭州)地域下名為examplebucket的Bucket下有名為example的文件夾,文件夾內有個名為example.jpg的文件。則該文件URL為:
外網訪問URL:
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/example/example.jpg
內網訪問URL(供同地域ECS實例訪問):
https://examplebucket.oss-cn-hangzhou-internal.aliyuncs.com/example/example.jpg
如果文件所在的Bucket綁定了自定義域名,則文件URL的格式為https://YourDomainName/ObjectName
。
例如您在華東1(杭州)地域下的examplebucket綁定了自定義域名example.com
,且該Bucket下包含example.jpg的文件,則該文件URL為https://example.com/example.jpg
。
獲取多個文件的URL
僅OSS控制臺支持批量獲取多個文件的URL。
選中目標文件,然后單擊下方的導出URL列表。
在導出URL列表面板,配置以下參數:
參數
說明
使用HTTPS
默認使用HTTPS協議生成文件URL。如需使用HTTP協議生成文件URL,請關閉使用HTTPS開關。
過期時間
當目標文件為私有文件時,需設置文件URL的有效時間。
取值范圍:60~32400
單位:秒
若您希望獲取更長時效的文件URL,建議使用命令行工具ossutil或圖形化工具ossbrowser。
自有域名
如需確保第三方訪問圖片或網頁文件時是預覽行為,請使用Bucket綁定的自定義域名生成文件URL。
僅當Bucket綁定自定義域名后可配置此項。更多信息,請參見綁定自定義域名。
傳輸加速域名
若第三方涉及跨國或跨洋等超遠距離文件訪問場景時,建議使用傳輸加速域名生成文件URL。
僅當Bucket開啟傳輸加速后可配置此項。更多信息,請參見開啟傳輸加速。
單擊確定,然后將URL列表文件保存到本地。
如果您希望通過命令行管理工具ossutil、阿里云SDK批量獲取多個文件的URL時:
通過GetBucket (ListObjects)接口獲取所有Object的名稱。
循環調用獲取單個文件的URL方法。具體操作,請參見獲取單個文件的URL。
相關文檔
您可以上傳ECS的鏡像文件至OSS,然后獲取鏡像文件URL導入自定義鏡像。更多信息,請參見上傳鏡像文件至OSS和導入自定義鏡像。