使用Swift SDK V2發起OSS請求時,您需要初始化一個OSS Client執行個體,並根據需要修改預設配置項。
注意事項
初始化OSS Client前,您需要配置訪問憑證,本文以從環境變數讀取存取憑證為例,更多配置樣本請參見配置訪問憑證(Swift SDK)。
關於OSS支援的Region與Endpoint的對應關係,請參見地區和Endpoint。
前置條件
在配置用戶端前,您需要先使用RAM使用者AccessKey完成配置環境變數。
使用RAM使用者AccessKey配置環境變數。
Linux
在命令列介面執行以下命令來將環境變數設定追加到
~/.bashrc檔案中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc執行以下命令使變更生效。
source ~/.bashrc執行以下命令檢查環境變數是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
在終端中執行以下命令,查看預設Shell類型。
echo $SHELL根據預設Shell類型進行操作。
Zsh
執行以下命令來將環境變數設定追加到
~/.zshrc檔案中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc執行以下命令使變更生效。
source ~/.zshrc執行以下命令檢查環境變數是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
執行以下命令來將環境變數設定追加到
~/.bash_profile檔案中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile執行以下命令使變更生效。
source ~/.bash_profile執行以下命令檢查環境變數是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Windows
CMD
在CMD中運行以下命令。
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"運行以下命令,檢查環境變數是否生效。
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
在PowerShell中運行以下命令。
[Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)運行以下命令,檢查環境變數是否生效。
[Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
參考上述方式修改系統內容變數後,請重啟或重新整理您的編譯運行環境,包括IDE、命令列介面、其他傳統型應用程式及後台服務,以確保最新的系統內容變數成功載入。
預設配置樣本
Swift SDK V2預設使用V4簽名,在初始化Client時,您需要指定阿里雲通用Region ID作為發起請求地區的標識,本範例程式碼使用華東1(杭州)Region ID:cn-hangzhou。如需查詢其它Region ID請參見地區和Endpoint。
Swift SDK V2可以通過Endpoint參數,自訂服務要求的訪問網域名稱。當不指定時,SDK預設根據Region資訊,構造公網訪問網域名稱。例如當Region為'cn-hangzhou'時,構造出來的訪問網域名稱為'https://oss-cn-hangzhou.aliyuncs.com'。
Swift SDK V2構造訪問網域名稱時預設採用HTTPS協議,如需採用HTTP協議,請在指定網域名稱時指定為HTTP,例如'http://oss-cn-hangzhou.aliyuncs.com'。
import AlibabaCloudOSS
import Foundation
@main
struct Main {
static func main() async {
// 填寫Bucket所在地區(樣本:華東1為cn-hangzhou)
let region = "cn-hangzhou"
// 可選項,指定訪問OSS服務的網域名稱。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com
let endpoint: String? = nil
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
let credentialsProvider = EnvironmentCredentialsProvider()
// 配置OSS用戶端參數
let config = Configuration.default()
.withRegion(region) // 設定Bucket所在地區
.withCredentialsProvider(credentialsProvider) // 設定訪問憑證
// 設定自訂Endpoint
if let endpoint = endpoint {
config.withEndpoint(endpoint)
}
// 建立OSS用戶端執行個體
let client = Client(config)
}
}常見情境配置樣本
內網網域名稱配置樣本
當您的應用部署在阿里雲的ECS執行個體上,並且需要頻繁訪問同地區的OSS資源時,使用內網網域名稱可以降低流量成本並提高訪問速度。
以下是使用OSS內網網域名稱配置OSSClient的範例程式碼。
import AlibabaCloudOSS
import Foundation
@main
struct Main {
static func main() async {
// 填寫Bucket所在地區(樣本:華東1為cn-hangzhou)
let region = "cn-hangzhou"
let endpoint: String? = "https://oss-cn-hangzhou-internal.aliyuncs.com" // 可選項,指定訪問OSS服務的內網網域名稱。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou-internal.aliyuncs.com
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
let credentialsProvider = EnvironmentCredentialsProvider()
// 配置OSS用戶端參數
let config = Configuration.default()
.withRegion(region) // 設定Bucket所在地區
.withCredentialsProvider(credentialsProvider) // 設定訪問憑證
// 您也可以無需指定內網endpoint,直接設定useInternalEndpoint = true配置內網網域名稱
// .withUseInternalEndpoint(true)
// 設定自訂Endpoint
if let endpoint = endpoint {
config.withEndpoint(endpoint)
}
// 建立OSS用戶端執行個體
let client = Client(config)
}
}自訂網域名配置樣本
當您有多個不同的OSS Bucket用於不同的目的時,可以通過為每個Bucket設定不同的子網域名稱來更好地管理和組織資源。
以下是使用自訂網域名配置OSSClient的範例程式碼。
您需要先將自訂網域名綁定至Bucket預設網域名稱,否則將引發報錯!關於綁定自訂網域名的詳細操作,請參見通過自訂網域名訪問OSS。
import AlibabaCloudOSS
import Foundation
@main
struct Main {
static func main() async {
// 填寫Bucket所在地區(樣本:華東1為cn-hangzhou)
let region = "cn-hangzhou"
let endpoint: String? = "https://www.example-***.com" // 必須項,請填寫您的自訂網域名。例如www.example-***.com
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
let credentialsProvider = EnvironmentCredentialsProvider()
// 配置OSS用戶端參數
let config = Configuration.default()
.withRegion(region) // 設定Bucket所在地區
.withCredentialsProvider(credentialsProvider) // 設定訪問憑證
.withUseCname(true) // 請注意,設定true開啟CNAME選項,否則無法使用自訂網域名
// 設定自訂Endpoint
if let endpoint = endpoint {
config.withEndpoint(endpoint)
}
// 建立OSS用戶端執行個體
let client = Client(config)
}
}傳輸加速網域名稱配置樣本
以下是使用傳輸加速網域名稱配置OSSClient的範例程式碼。
import AlibabaCloudOSS
import Foundation
@main
struct Main {
static func main() async {
// 填寫Bucket所在地區(樣本:華東1為cn-hangzhou)
let region = "cn-hangzhou"
let endpoint: String? = "https://oss-accelerate.aliyuncs.com" // 可選項,填寫Bucket所在地區對應的傳輸加速Endpoint。以華東1(杭州)為例,Endpoint填寫為'https://oss-accelerate.aliyuncs.com'
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
let credentialsProvider = EnvironmentCredentialsProvider()
// 配置OSS用戶端參數
let config = Configuration.default()
.withRegion(region) // 設定Bucket所在地區
.withCredentialsProvider(credentialsProvider) // 設定訪問憑證
// 您也可以無需指定傳輸加速endpoint,直接設定useAccelerateEndpoint = true配置傳輸加速網域名稱
// .withUseAccelerateEndpoint(true)
// 設定自訂Endpoint
if let endpoint = endpoint {
config.withEndpoint(endpoint)
}
// 建立OSS用戶端執行個體
let client = Client(config)
}
}專有網域設定樣本
以下是使用專有網域設定OSSClient的範例程式碼。
import AlibabaCloudOSS
import Foundation
@main
struct Main {
static func main() async {
// 填寫Bucket所在地區(樣本:華東1為cn-hangzhou)
let region = "cn-hangzhou"
let endpoint: String? = "https://service.corp.example.com" // 必須項,請填寫您的專有域。例如:https://service.corp.example.com
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
let credentialsProvider = EnvironmentCredentialsProvider()
// 配置OSS用戶端參數
let config = Configuration.default()
.withRegion(region) // 設定Bucket所在地區
.withCredentialsProvider(credentialsProvider) // 設定訪問憑證
// 設定自訂Endpoint
if let endpoint = endpoint {
config.withEndpoint(endpoint)
}
// 建立OSS用戶端執行個體
let client = Client(config)
}
}政務雲配置樣本
以下是使用政務雲網域名稱配置OSSClient的範例程式碼。
import AlibabaCloudOSS
import Foundation
@main
struct Main {
static func main() async {
// 填寫Bucket所在地區。以華北2 阿里政務雲1為例,Region填寫為cn-north-2-gov-1
let region = "cn-north-2-gov-1"
// 必須項, 填寫Bucket所在地區對應的內網Endpoint。以華北2 阿里政務雲1為例,Endpoint填寫為'https://oss-cn-north-2-gov-1-internal.aliyuncs.com'
let endpoint: String? = "https://oss-cn-north-2-gov-1-internal.aliyuncs.com"
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
let credentialsProvider = EnvironmentCredentialsProvider()
// 配置OSS用戶端參數
let config = Configuration.default()
.withRegion(region) // 設定Bucket所在地區
.withCredentialsProvider(credentialsProvider) // 設定訪問憑證
// 設定自訂Endpoint
if let endpoint = endpoint {
config.withEndpoint(endpoint)
}
// 建立OSS用戶端執行個體
let client = Client(config)
}
}OSSClient配置參數匯總
參數名 | 說明 | 樣本 |
| (必選)請求發送的地區 | Configuration.region = "cn-hangzhou" |
| 訪問網域名稱 | Configuration.endpoint = "oss-cn-hangzhou.aliyuncs.com" |
| 失敗請求的最大重試次數 | Configuration.retryMaxAttempts = 5 |
| HTTP請求時的重試實現 | Configuration.retryer = customRetryer |
| 設定日誌列印介面 | Configuration.HttpTransport = customLogger |
| (必選)設定訪問憑證 | Configuration.credentialsProvider = EnvironmentCredentialsProvider() |
| 使用路徑請求風格,即次層網域請求風格,預設為bucket託管網域名稱 | Configuration.usePathStyle = true |
| 是否使用自訂網域名訪問,預設不使用 | Configuration.useCName = true |
| 請求逾時時間, 預設值為 15 秒 | Configuration.timeoutIntervalForRequest = 30 |
| 資源請求允許花費的最長時間, 預設值為 24 小時 | Configuration.timeoutIntervalForResource = 60 * 60 |
| 是否跳過SSL認證校正,預設檢查SSL認證 | Configuration.enableTLSVerify = true |
| 是否開啟HTTP重新導向, 預設不開啟 | Configuration.enableFollowRedirect = true |
| 單host最大串連數 | Configuration.maxConnectionsPerHost = 5 |
| 簽名版本,預設值為v4 | Configuration.signerVersion = "v4" |
| HTTP協議,預設使用HTTPS | Configuration.httpProtocal = .https |
| 是否使用雙棧網域名稱訪問,預設不使用 | Configuration.useDualStackEndpoint = true |
| 是否使用傳輸加速網域名稱訪問,預設不使用 | Configuration.useAccelerateEndpoint = true |
| 是否使用內網網域名稱訪問,預設不使用 | Configuration.useInternalEndpoint = true |
| 上傳時開啟CRC64校正,預設開啟CRC64校正 | Configuration.enableUploadCRC64Validation = true |
| 下載時開啟CRC64校正,預設開啟CRC64校正 | Configuration.enableDownloadCRC64Validation = true |
| 指定額外的簽章要求頭,V4簽名下有效 | Configuration.additionalHeaders = ["x-oss-meta-*"] |
| 指定額外的User-Agent資訊 | Configuration.userAgent = "MyApp/1.0" |

