<CF_HOME>/cfusion/bin に移動します。
概要
Blob(Binary Large OBject、バイナリラージオブジェクト)には、画像、テキストファイル、ビデオまたはオーディオが含まれます。Azure Blob Storage は、クラウドの永続的なデータストレージです。Blob データの保存に利用できます。
ColdFusion と Azure Blob
ColdFusion(2018 リリース)には、AWS S3 ストレージサービスのサポートが含まれています。ColdFusion(2021 リリース)では、これを拡張して Azure Blob を使用したマルチクラウドストレージを提供し、要件に基づいて、データの保存および取得に様々なストレージサービスを使用できます。
ColdFusion では、Azure ストレージサービスの次の操作を利用できます。
- 例えば、コンテナの作成、更新、削除、リスト表示など、様々な操作を実行する。
- Blob に項目をアップロードしたり、Blob からダウンロードしたりする。
- コンテナにポリシーを適用する。
- 同じアカウント内のコンテナ間で Blob をコピーする。
- Shared Access Signature を使用して様々なユーザーのコンテナまたは Blob の権限を共有する。
Weblogic 14.1.1.0.0 では、Azure BLOB をストレージとして使用すると、Null ポインター例外が発生します。この問題を回避するには、回避策を参照してください。
はじめに
azureblob パッケージのインストール
Zip インストーラーを使用する場合に限り、Adobe ColdFusion(2021 リリース)はモジュール化されています。デフォルトでは、Azure Blob のパッケージはインストールされていません。最初の手順は、ColdFusion の Blob パッケージをインストールすることです。
注意:GUI インストーラーを使用する場合、これらのパッケージは事前にインストールされています。
Blob のパッケージは、azureblob と呼ばれます。
azureblob パッケージをインストールするには、ColdFusion Administrator のパッケージマネージャーページを使用するか、以下の手順に従います。
-
-
次のコマンドを入力します。
- Windows:cfpm.bat
- Linux:cfpm.sh
-
コマンド install azureblob を入力します。
Azure Blob パッケージがインストールされるまで待ちます。
詳しくは、ColdFusion パッケージマネージャーを参照してください。
クラウドサービス資格情報および設定の追加
ColdFusion(2021 リリース)には、様々なクラウドサービスにアクセスするためのオブジェクトを作成するためにハンドルを提供するメソッド、getCloudService() があります。
サービスハンドルのシンタックスを次に示します。
service=getCloudService(cloudCred,cloudConfig)
- cloudCred:クラウドサービスの資格情報を定義します。構造体または文字列です(資格情報エイリアスとも呼ばれます)。
- cloudConfig:クラウドサービス設定の詳細を定義します。構造体または文字列です(設定エイリアスとも呼ばれます)。
Azure 資格情報を獲得したら、次のいずれかの方法でこれらの資格情報を宣言する必要があります。それによって初めて、これらの資格情報を使用して Blob オブジェクトを作成でき、それからそのオブジェクトを使用して様々な Azure Blob メソッドを呼び出すことができます。
ColdFusion Administrator
資格情報の設定
ColdFusion Administrator で、データとサービス/クラウド資格情報をクリックします。
エイリアスは、クラウドサービスおよびその設定の詳細の名前付き表現です。ColdFusion Administrator を使用して設定エイリアスを設定できます。
接続文字列には、アプリケーションから Azure Storage アカウントのデータにアクセスするために必要な認証情報が含まれています。
詳しくは、Azure Storage の接続文字列を構成するを参照してください。
詳細を入力したら、「資格情報を追加」をクリックします。
設定オプションの設定
ColdFusion Administrator で、「データとサービス/クラウド設定」をクリックします。
設定エイリアス、ベンダー、サービスの名前など、次の詳細を入力します。
設定オプションを追加した後、さらにいくつかのオプションを追加する必要がある場合があります。次に表示される画面で追加できます。場合によって追加する必要があるオプションを次に示します。
- 同時リクエスト数
- 単一ブロックサイズ(バイト)
- 最大実行時間(ミリ秒)
- 再試行ポリシーのタイプ
- ログを有効にする
詳しくは、クラウド設定オプションを参照してください。
Azure Blob サービス対象の作成
Blob 資格情報および設定オプションのエイリアスを作成したら、getCloudService API を使用してオブジェクトを作成し、次のコードを CFM に含めることができます。
blobObject= getCloudService("blobCred", "blobConf")
Application.cfc
Application.cfc で Blob 資格情報および設定オプションを指定できます。次に例を示します。
omponent {
this.name ="AzureblobTest"
this.serialization.preservecaseforstructkey=true
this.enableNullSupport=true
void function onApplicationStart(){
application.blobCred = {
"vendorName" : "AZURE",
"connectionString" : "xxxxxxxxxxx"
}
application.blobConf = {
"serviceName" : "AZURE_BLOB"
}
}
}
Azure Blob サービス対象の作成
blobObject = getCloudService(application.blobCred, application.blobConf)
CFM ページ上
CFM ページでは、次に示す 4 つの方法のいずれかで Blob 資格情報および設定オプションを指定できます。
資格情報エイリアスおよび設定エイリアス
Azure Blob 資格情報および設定オプション用のエイリアスを作成したら、次に示すように、getCloudService ハンドルでそれらのエイリアスを使用できます。
<cfscript> // ColdFusion Administrator で資格情報エイリアスと設定エイリアスを定義 blobObject=getCloudService("blobCred","blobConf") // 以下にコードを記述 ........... </cfscript>
資格情報エイリアスおよび設定オプションの構造体
<cfscript>
blobCred = {
"vendorName" : "AZURE",
"connectionString" : "xxxxxx"
}
blobConf = {
"serviceName" : "AZURE_BLOB",
"options" : {
"absorbConditionalErrorsOnRetry" : true/false,
"concurrentRequestCount" : 5,
"useTransactionalContentMD5" : true/false,
"storeBlobContentMD5" : true/false,
"disableContentMD5Validation": true/fasle,
"singleBlobPutThresholdInBytes" : 12345,
"skipEtagLocking" : true/false,
"retryPolicyFactory": {
"retryPolicyType" : "EXPONENTIAL" | "LINEAR" | "NONE",
"deltaBackoffIntervalInMs" : 12,
"maxAttempts" : 3,
"resolvedMinBackoff" : 1
},
"locationMode" : "PRIMARY_ONLY" | "PRIMARY_THEN_SECONDARY" | "SECONDARY_ONLY" | "SECONDARY_THEN_PRIMARY",
"maximumExecutionTimeInMs" : 2,
"timeoutIntervalInMs" : 1
}
}
</cfscript>
設定エイリアスおよび資格情報の構造体
<cfscript>
// 設定エイリアスとサービス資格情報構造体を使用
// Blob 資格情報
blobCreds={
"vendorName" : "AZURE",
"connectionString" : "xxxxxx"
}
blobObject= getCloudService(blobCreds, "blobConf")
// 以下にコードを記述
.....................................
</cfscript>
資格情報と設定オプションの両方の構造体
<cfscript>
// クラウドの資格情報と設定の構造体を使用
blobCred = {
"vendorName" : "AZURE",
"connectionString" : "xxxxxx"
}
blobConf = {
"serviceName" : "AZURE_BLOB",
"options" : {
"absorbConditionalErrorsOnRetry" : true/false,
"concurrentRequestCount" : 5,
"useTransactionalContentMD5" : true/false,
"storeBlobContentMD5" : true/false,
"disableContentMD5Validation": true/fasle,
"singleBlobPutThresholdInBytes" : 12345,
"skipEtagLocking" : true/false,
"retryPolicyFactory": {
"retryPolicyType" : "EXPONENTIAL" | "LINEAR" | "NONE",
"deltaBackoffIntervalInMs" : 12,
"maxAttempts" : 3,
"resolvedMinBackoff" : 1
},
"locationMode" : "PRIMARY_ONLY" | "PRIMARY_THEN_SECONDARY" | "SECONDARY_ONLY" | "SECONDARY_THEN_PRIMARY",
"maximumExecutionTimeInMs" : 2,
"timeoutIntervalInMs" : 1
}
}
blob = getCloudService(blobCred, blobConf )
// 以下にコードを記述
...................................................................
</cfscript>
Admin API
また、Admin API を使用して SQS 資格情報および設定オプションを追加することもできます。資格情報および設定を追加するためのメソッドは、cloud.cfc で使用できます。
次に、メソッド addCredential(struct credential) および addServiceConfig(struct config) の使用例を示します。
資格情報の追加
<cfscript>
// Administrator コンポーネントのオブジェクトを作成して login メソッドを呼び出す
adminObj = createObject("component","cfide.adminapi.administrator")
adminObj.login("admin")
// クラウドコンポーネントのオブジェクトを作成
cloudObj = createObject("component","cfide.adminapi.cloud")
// 資格情報構造体を定義
credentialStruct={
"vendorName" : "AZURE",
"connectionString" : "xxxxxx"
}
// 資格情報の credentialStruct を追加
try{
cloudObj.addCredential(credentialStruct)
writeOutput("Credentials added successfully")
}
catch(any e){
writeDump(e)
}
</cfscript>
設定の追加
<cfscript>
// Administrator コンポーネントのオブジェクトを作成して login メソッドを呼び出す
adminObj = createObject("component","cfide.adminapi.administrator")
adminObj.login("admin")
// クラウドコンポーネントのオブジェクトを作成
cloudObj = createObject("component","cfide.adminapi.cloud")
// 設定構造体を定義
configStruct={
""serviceName" : "AZURE_BLOB",
"options" : {
"absorbConditionalErrorsOnRetry" : true/false,
"concurrentRequestCount" : 5,
"useTransactionalContentMD5" : true/false,
"storeBlobContentMD5" : true/false,
"disableContentMD5Validation": true/fasle,
"singleBlobPutThresholdInBytes" : 12345,
"skipEtagLocking" : true/false,
"retryPolicyFactory": {
"retryPolicyType" : "EXPONENTIAL" | "LINEAR" | "NONE",
"deltaBackoffIntervalInMs" : 12,
"maxAttempts" : 3,
"resolvedMinBackoff" : 1
},
"locationMode" : "PRIMARY_ONLY" | "PRIMARY_THEN_SECONDARY" | "SECONDARY_ONLY" | "SECONDARY_THEN_PRIMARY",
"maximumExecutionTimeInMs" : 2,
"timeoutIntervalInMs" : 1
}
}
// 設定の configStruct を追加
try{
cloudObj.addServiceConfig(configStruct)
writeOutput("Configuration service added successfully")
}
catch(any e){
writeDump(e)
}
</cfscript>
CFSetup
CFSetup 設定ユーティリティを使用して SQS の資格情報と設定をセットアップすることもできます。
クラウド資格情報の追加
- add cloudcredential credentialAlias=blobCred accesskeyid=<access> secretaccesskey=<secret> region=ap-southeast-1 vendorname=AWS
資格情報の設定
- set cloudcredential snscred secretaccesskey=awssecret
クラウド設定の追加
- add cloudconfiguration serviceName=S3 alias=s3Config
設定の設定
- set cloudconfiguration conf1 alias=conf2
ルートの作成
ルートオブジェクトを作成します。ルートが存在しない場合は、ルートが作成されます。
- Amazon S3 - はい
- Azure - はい
- マルチクラウド - はい
シンタックス
root(rootName,createIfNotExists)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
rootName |
作成するルートの名前。 |
はい |
|
createIfNotExists |
true または false。ルートが存在しない場合は、作成されます。 |
いいえ |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// ルートを作成
try{
storageService.root("root014","false") // createIfNotExists=FALSE
writeOutput("Root created successfully")
}
catch(any e){
writeOutput("Unable to create root")
}
</cfscript>
ルートの作成 - 追加のパラメーター
追加のパラメーターを使用してルートオブジェクトを作成します。
- Amazon S3 - はい
- Azure - はい
- マルチクラウド - はい
シンタックス
createRoot(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
containerName |
作成するルートの名前。 |
はい |
|
publicAccesstype |
publicAccessType パラメーターは、アクセス権が付与されるレベルを定義します。このパラメーターは、次の 3 つの値のいずれかを受け入れることができます。
|
いいえ |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// ルートオブジェクトを作成
createRequest= {
"containerName" : "root111",
"publicAccessType" :"BLOB"
}
try{
storageService.createcontainer(createRequest)
writeOutput("Root created successfully")
}
catch(any e){
writeDump(e)
}
</cfscript>
すべての Blob のリスト表示
ストレージアカウントのルートオブジェクトのリストを取得します。
- Amazon S3 - はい
- Azure - はい
- マルチクラウド - はい
シンタックス
listAll(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
prefix |
名前が指定された接頭辞で始まる Blob のみを返します。 |
いいえ |
|
isFlatList |
true または false。 |
いいえ |
|
listingDetails |
応答に含める 1 つまたは複数の値を指定します。
|
いいえ |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// すべての Blob をリストアップ
blobList=storageService.listAll()
writeDump(blobList)
</cfscript>
Blob の削除
Blob およびそのスナップショットを削除します。
- Amazon S3 - はい
- Azure - はい
- マルチクラウド - はい
シンタックス
delete(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
key |
削除する Blob の名前。 |
はい |
|
deleteSnapshotsOption |
削除する Blob スナップショットを指定します。有効な値は、次のとおりです。
|
いいえ |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// ルートを作成
try{
storageService.root("root014","false") // createIfNotExists=FALSE
writeOutput("Root created successfully")
}
catch(any e){
writeOutput("Unable to create root")
}
rootArray=storageService.listAll()
writedump(rootArray[1])
// ルートを削除
try{
storageService.delete(rootArray[1].name)
writeOutput("Root deleted successfully")
}
catch(any e){
writeOutput("Unable to delete root")
}
</cfscript>
コンテナ内のファイルのアップロード
シンタックス
uploadFile(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
key |
ファイルの名前。 |
はい |
|
srcFile |
アップロードされるファイルのパス。 |
はい |
|
accessCondition |
リクエストを続行するために満たす必要がある条件を表す AccessCondition オブジェクト。有効な値は、次のとおりです。
|
いいえ |
|
context |
現在の操作のコンテキストを表します。 |
いいえ |
|
options |
リクエストの追加のオプションを指定します。null の場合、デフォルトオプションがリクエストに適用されます。 |
いいえ |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// コンテナ構造体を作成
createRequest= {
"containerName" : "container3",
"publicAccessType" :"BLOB"
}
rootObj=storageService.createcontainer(createRequest)
// リクエストを続行するために満たす必要がある条件を表す accessCondition オブジェクト
uploadStruct = {
"blobName" : "blob003",
"srcFile" : "#ExpandPath('./')#/file.txt"
}
try {
uploadResponse=rootObj.uploadFile(uploadStruct)
writeOutput("File uploaded successfully")
writeDump(uploadResponse)
}
catch(any e){
writeDump(e)
}
</cfscript>
コンテナからのファイルのダウンロード
コンテナからファイルをダウンロードします。
- Amazon S3 - はい
- Azure - はい
- マルチクラウド - はい
シンタックス
downloadToFile(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
destinationFile |
ファイルのダウンロード先のパス。 |
はい |
|
key |
コンテナに関連付けられたキー。 |
はい |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// ファイルをアップロード
uploadStruct = {
"key" : "key001",
"srcFile" : "#ExpandPath('./')#/file.txt"
}
try {
rootObj=storageService.root("root015","true") // createIfNotExists=FALSE
uploadResponse=rootObj.uploadFile(uploadStruct)
writeOutput("File uploaded successfully")
// writeDump(uploadResponse)
}
catch(any e){
writeOutput("File upload failed")
}
// ファイルをダウンロード
downloadStruct={
"key": "key001",
"destinationFile": "file.txt"
}
try{
downloadResponse=rootObj.downloadToFile(downloadStruct)
writeOutput("File downloaded successfully")
}
catch (any e){
writedump(e)
}
</cfscript>
Blob のコピー
Blob を別の Blob にコピーします。
- Amazon S3 - はい
- Azure - はい
- マルチクラウド - はい
シンタックス
copy(paramerStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
source |
ソース Blob。 |
はい |
|
sourceVersion |
Blob がアップロードされた際のバージョン。 |
いいえ |
|
sourceAccessCondition |
ストレージサービスに対する操作に使用されるアクセス条件のセットを表します。 |
いいえ |
|
storageClass |
有効な値は、次のとおりです。
|
いいえ |
|
key |
Blob に関連付けられたキー。 |
はい |
例
<cfscript>
storageService1 = getCloudService(application.blobCred, application.blobConf)
containerList = storageService1.listAll()
// writeDump(containerList)
object1="container-object1"
containerobject = storageService1.container("#object1#",true);
containerList = storageService1.listAll()
// writeDump(containerList)
FileWrite("#ExpandPath('./')#file.txt","this test copy with access condition and storage classes");
src = "file.txt"
blobName = "A/B/blob1"
uploadRequest = {
"srcFile" : src,
"blobName" : blobName
}
uploadResponse = containerobject.uploadFile(uploadRequest);
containerList = containerobject.listAll()
// writeDump(containerList)
// Blob オブジェクトをコピー
copyRequest = {
"source" : "container-object1/A/B/blob1",
"storageClass" : "HOT",
"blobName" : "C/D/blob2" // 宛先 Blob
}
copyResponse = containerobject.copy(copyRequest);
containerList = containerobject.listAll()
writeDump(copyResponse)
</cfscript>
ディレクトリのアップロード
コンテナのディレクトリをアップロードします。また、一括アップロードを実行することもできます。
- Amazon S3 - はい
- Azure - はい
- マルチクラウド - はい
シンタックス
uploadDirectory(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
prefix |
指定された接頭辞で始まるディレクトリのみを選択します。 |
はい |
|
srcDirectory |
アップロード元のディレクトリ。 |
はい |
|
uploadNestedDirectory |
true または false。メインのフォルダー内にサブディレクトリを含めるかどうかを指定します。 |
いいえ |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
object1="root-object1"
uploadRequest = {
"prefix" : "prefix",
"srcDirectory" : "DirLocation",
"uploadNestedDirectory":true
}
root = storageService.container("#object1#",true);
uploadResponse = root.uploadDirectory(uploadRequest); writeDump(uploadResponse)
</cfscript>
ファイルの並列アップロード
ルートのファイルを並行してアップロードします。
- Amazon S3 - はい
- Azure - はい
- マルチクラウド - はい
シンタックス
parallelUploadFile(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
key |
アップロードするオブジェクトに関連付けられたキー。 |
はい |
|
srcFile |
アップロードされるファイルのパス。 |
はい |
|
accessCondition |
リクエストを続行するために満たす必要がある条件を表す AccessCondition オブジェクト。有効な値は、次のとおりです。
|
いいえ |
|
context |
現在の操作のコンテキストを表します。 |
いいえ |
|
options |
リクエストの追加のオプションを指定します。null の場合、デフォルトオプションがリクエストに適用されます。 構造体には、次が含まれます。
|
いいえ |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
object1="root-new"
Dirpath=#ExpandPath( ".")#&"/"
rootObject = storageService.root("#object1#",true)
FileWrite("#Dirpath#uploadfile.txt","This txt file is used to upload and download functionality for azure blob storage.")
src = "uploadfile.txt" key = "key1" uploadRequest = { "srcFile" : src, "key" : key, "options": {"timeoutIntervalInMs":2000} } try{ uploadResponse = rootObject.parallelUploadFile(uploadRequest) writeOutput("Successfully uploaded file parallelly") writeDump(uploadResponse) } catch(any e){ writeDump(e) } </cfscript>
ファイルの並行ダウンロード
ファイルを並行してダウンロードします。ファイルのサイズが大きい場合、このメソッドは内部で複数のスレッドを使用してファイルをダウンロードします。
- Amazon S3 - はい
- Azure - はい
- マルチクラウド - はい
シンタックス
parallelDownloadFile(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
destinationFile |
ダウンロードされるファイルの名前。 |
はい |
|
filePath |
宛先ファイルの位置。 |
はい |
|
key |
アップロードするオブジェクトに関連付けられたキー。 |
はい |
|
srcFile |
アップロードされるファイルのパス。 |
はい |
|
accessCondition |
リクエストを続行するために満たす必要がある条件を表す AccessCondition オブジェクト。有効な値は、次のとおりです。
|
いいえ |
|
context |
現在の操作のコンテキストを表します。 |
いいえ |
|
options |
リクエストの追加のオプションを指定します。null の場合、デフォルトオプションがリクエストに適用されます。 構造体には、次が含まれます。
|
いいえ |
例
<cfscript> storageService = getCloudService(application.blobCred, application.blobConf) object1="root-download" Dirpath=#ExpandPath( ".")#&"/"
rootObject = storageService.root("#object1#",true)
FileWrite("#Dirpath#uploadfile.txt","This txt file is used to upload and download functionality for azure blob storage.")
src = "uploadfile.txt"
key = "key1"
uploadRequest = {
"srcFile" : src,
"key" : key
}
// ファイルをアップロード
uploadResponse = rootObject.uploadFile(uploadRequest)
// アップロードした同じファイルをダウンロードして内容を確認
FileWrite("#Dirpath#download.txt","");
destination = "download.txt"
downloadRequest = {
"destinationFile" : destination,
"key" : key,
"options": {"timeoutIntervalInMs":2000}
}
try{
downloadResponse = rootObject.parallelDownloadFile(downloadRequest)
writeOutput("Successfully downloaded file parallelly")
writeDump(downloadResponse)
}
catch (any e){
writeDump(e)
}
</cfscript>
オブジェクトのアップロード
ColdFusion オブジェクトをルートにアップロードします。
- Amazon S3 - はい
- Azure - はい
- マルチクラウド - はい
シンタックス
uploadObject(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
object |
アップロードする ColdFusion オブジェクト。 |
はい |
|
blobName |
オブジェクトのアップロード先の Blob の名前。 |
はい |
|
type |
オブジェクトのタイプ - json。 |
いいえ |
|
options |
リクエストの追加のオプションを指定します。null の場合、デフォルトオプションがリクエストに適用されます。 構造体には、次が含まれます。
|
いいえ |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
rootObject = storageService.root("root-upload",true)
// アップロード構造体を定義
uploadRequestsstruct ={
"object" : "test string for encryption",
"blobName" : "key001",
"type" :"json",
"options":{
"maximumExecutionTimeInMs" : 1000
}
}
try{
uploadResponse=rootObject.uploadObject(uploadRequestsstruct)
writeOutput("Object uploaded successfully")
writeDump(uploadResponse)
}
catch(any e){
writeDump(e)
}
</cfscript>
オブジェクトのダウンロード
ColdFusion オブジェクトをルートからダウンロードします。
- Amazon S3 - はい
- Azure - はい
- マルチクラウド - はい
シンタックス
downloadObject(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
key |
オブジェクトがアップロードされた際に使用したキー。 |
はい |
|
type |
ColdFusion オブジェクトのタイプ - json |
はい |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
rootObject = storageService.root("root-download",true)
// アップロード構造体を定義
uploadRequestsstruct ={
"object" : "test string for encryption",
"blobName" : "key001",
"type" :"json",
"options":{
"maximumExecutionTimeInMs" : 1000
}
}
// オブジェクトをアップロード
rootObject.uploadObject(uploadRequestsstruct)
// ダウンロード構造体を定義
downloadObjectStruct = {
"blobName" : "key001",
"type" :"json"
}
try{
downloadResponse=rootObject.downloadObject(downloadObjectStruct)
writeOutput("Downloaded the object successfully")
writeDump(downloadResponse)
}
catch(any e){
writeDump(e)
}
</cfscript>
コンテナの作成
コンテナは、ストレージアカウントのデフォルトコンテナとして機能します。ストレージアカウントには、1 つのコンテナを含めることができます。コンテナに保存された Blob は、コンテナ名を参照せずに対処できます。詳しくは、Azure Blob コンテナを参照してください。
container メソッドを使用してコンテナを作成します。このメソッドは、2 つのパラメーターを受け入れます。
- コンテナの名前(必須)
- パブリックアクセスタイプ(オプション):publicAccessType パラメーターは、アクセス権が付与されるレベルを定義します。このパラメーターは、次の 4 つの値のいずれかを受け入れることができます。
- BLOB:Blobレベルのパブリックアクセスを指定します。クライアントは、このコンテナ内の Blob のコンテンツおよびメタデータを読み取ることができますが、コンテナのメタデータを読み取ったりコンテナ内の Blob をリスト表示したりできません。
- CONTAINER:コンテナレベルのパブリックアクセスを指定します。クライアントは、Blob コンテンツ、メタデータ、コンテナのメタデータを読み取ったり、コンテナ内の Blob をリスト表示したりできます。
- OFF:パブリックアクセスなしを指定します。アカウント所有者のみがこのコンテナのリソースにアクセスできます。
スナップショットの作成
Blob スナップショットは、特定の時点で取得された Blob の読み取り専用バージョンです。スナップショットは、作成後、読み取り、コピーまたは削除できますが、変更することはできません。スナップショットは、ある時点での Blob をそのままバックアップする方法を提供します。
Blob に対するスナップショットの数に制限はありません。スナップショットは、明示的に削除されるまで保持されます。スナップショットは、ソース Blob より長く存続することはできません。Blob に関連付けられたスナップショットを列挙して、現在のスナップショットを追跡できます。
詳しくは、Azure Blob のスナップショットを参照してください。
シンタックス
createSnapshot(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
blobName |
スナップショットを作成したい Blob の名前。 |
はい |
|
keyName |
Blob に関連付けられたキー。 |
はい |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// コンテナを作成
container = storageService.container("con001",true)
src = "#ExpandPath('./')#file.txt"
//writedump(src)
blobname = "Version-1"
// Blob にファイルをアップロード
uploadRequest = {
"srcFile" : src,
"blobName" : blobname
}
uploadResponse = container.uploadFile(uploadRequest)
//writeDump(uploadResponse)
// スナップショットを作成
// スナップショット構造体を作成
versionRequest = {
"blobName" : "Version-1"
}
snapshot1 = container.Createsnapshot(versionRequest);
snapshot2 = container.Createsnapshot(versionRequest);
writeDump(snapshot1)
writeDump(snapshot2)
</cfscript>
様々なアカウントのコンテナのコピー
ストレージクラスを使用して、様々なアカウントの Blob をコピーします。
例
<cfscript>
storageService1 = getCloudService(application.blobCred, application.blobConf)
rootList = storageService1.listAll()
for (i=1;i LTE ArrayLen(rootList);i=i+1)
{
if( (i GT 0 ) and (rootList[i].name Neq "rootpoc") ){
storageService1.delete(rootList[i].name)}
}
sleep(35000)
rootobject = storageService1.container("#object1#",true);
rootList = storageService1.listAll()
FileWrite("#Dirpath#uploadfile.txt","this test copy with access condition and storage classes");
src = "uploadfile.txt"
blobName = "A/B/key1"
uploadRequest = {
"srcFile" : src,
"blobName" : blobName
}
uploadResponse = rootobject.uploadFile(uploadRequest);
rootList = rootobject.listAll()
copyRequest = {
"source" : "root-object1/A/B/key1",
"storageClass" : "HOT",
"blobName" : "C/D/Key2"
}
copyResponse = rootobject.copy(copyRequest);
rootList = rootobject.listAll()
for (i=1;i LTE ArrayLen(rootList.response);i=i+1)
{
if(rootList.response[i].blobName eq "C/D/Key2"){
writeoutput(rootList.response[i].properties.standardBlobTier & " ")}
}
writeoutput(copyResponse.status)
</cfscript>
バージョンの作成
Blob のバージョンを作成します。バージョン管理を有効にして、Blob の以前のバージョンを自動的に維持できます。
詳しくは、BLOB のバージョン管理を参照してください。
シンタックス
createVersion(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
blobName |
スナップショットを作成したい Blob の名前。 |
はい |
|
keyName |
Blob に関連付けられたキー。 |
はい |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
object1="root-object1"
FileWrite("#ExpandPath('./')#file.txt","this test copy with access condition and storage classes");
rootobject = storageService.root("#object1#",true);
src = "file.txt"
key = "Version-1"
uploadRequest = {
"srcFile" : src,
"key" : key
}
uploadResponse = rootobject.uploadFile(uploadRequest);
writeDump(uploadResponse)
versionRequest = {
"key" : "Version-1"
}
Version1 = rootobject.createversion(versionRequest);
Version2 = rootobject.createversion(versionRequest);
writeDump(Version1)
writeDump(Version2)
</cfscript>
Blob に対するポリシーの適用
保存されているアクセスポリシーを使用すると、サーバー側でのサービスレベルの Shared Access Signature(SAS)をさらに制御できます。
保存されているアクセスポリシーを使用して、署名の開始時刻、有効期限、権限を変更したり、発行済みの署名を取り消したりすることができます。
詳しくは、アクセスポリシーを参照してください。
シンタックス
putPolicy(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
permissions |
共有アクセスポリシーで使用可能な権限の配列を指定します。有効な値は次のとおりです。
|
いいえ |
|
sharedAccessStartTime |
アクセス権が付与される時間を指定します。 |
いいえ |
|
sharedAccessExpiryTime |
アクセス権の有効期限が切れる時間を指定します。 |
いいえ |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// コンテナを作成
container = storageService.container("con002",true)
// 指定されたリクエストオプションと操作コンテキストを使用してコンテナの権限をアップロード。
// ポリシー構造体
policyStruct = {
"publicAccessType" : "OFF", //BLOB,CONTAINER
"sharedAccessPolicies" : {
"policyName1" : {
"permissions" : ["READ", "ADD"],
"sharedAccessExpiryTime" : "31/12/2019",
"sharedAccessStartTime" : "17/12/2019"
},
"policyName2" : {
"permissions" : ["READ", "ADD"],
"sharedAccessExpiryTime" : "31/12/2019",
"sharedAccessStartTime" : "17/12/2019"
}
}
}
putPolicyResponse=container.putPolicy(policyStruct);
writeDump(putPolicyResponse)
getPolicyResponse=container.getPolicies()
writeOutput("<br/>" & "List of all policies")
writeDump(getPolicyResponse)
</cfscript>
Blob のポリシーの取得
Blob に適用したポリシーを取得します。
シンタックス
getPolicies()
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// コンテナを作成
container = storageService.container("con002",true)
// 指定されたリクエストオプションと操作コンテキストを使用してコンテナの権限をアップロード。
// ポリシー構造体
policyStruct = {
"publicAccessType" : "OFF", //BLOB,CONTAINER
"sharedAccessPolicies" : {
"policyName1" : {
"permissions" : ["READ", "ADD"],
"sharedAccessExpiryTime" : "31/12/2019",
"sharedAccessStartTime" : "17/12/2019"
},
"policyName2" : {
"permissions" : ["READ", "ADD"],
"sharedAccessExpiryTime" : "31/12/2019",
"sharedAccessStartTime" : "17/12/2019"
}
}
}
putPolicyResponse=container.putPolicy(policyStruct);
writeDump(putPolicyResponse)
getPolicyResponse=container.getPolicies()
writeOutput("<br/>" & "List of all policies")
writeDump(getPolicyResponse)
</cfscript>
Blob のポリシーの削除
Blob に適用したポリシーを削除します。
シンタックス
deletePolicies()
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// コンテナを作成
container = storageService.container("con002",true)
// 指定されたリクエストオプションと操作コンテキストを使用してコンテナの権限をアップロード。
// ポリシー構造体
policyStruct = {
"publicAccessType" : "OFF", //BLOB,CONTAINER
"sharedAccessPolicies" : {
"policyName1" : {
"permissions" : ["READ", "ADD"],
"sharedAccessExpiryTime" : "31/12/2019",
"sharedAccessStartTime" : "17/12/2019"
},
"policyName2" : {
"permissions" : ["READ", "ADD"],
"sharedAccessExpiryTime" : "31/12/2019",
"sharedAccessStartTime" : "17/12/2019"
}
}
}
putPolicyResponse=container.putPolicy(policyStruct);
writeDump(putPolicyResponse)
getPolicyResponse=container.getPolicies()
writeOutput("<br/>" & "List of all policies")
writeDump(getPolicyResponse)
// ポリシーを削除
try{
deletePolicyResponse=container.deletePolicies()
writeOutput("Policy deleted successfully")
writeDump(deletePolicyResponse)
}
catch(any e){
writeDump(e)
}
</cfscript>
Shared Access Signature(SAS)の生成
Shared Access Signature(SAS)により、データのセキュリティを損なわずに、ストレージアカウントのリソースに対する安全な委任アクセスが可能になります。SAS を使用すると、クライアントによるデータへのアクセスをきめ細かく制御できます。特に、クライアントからアクセス可能なリソース、それらのリソースに対するクライアントの権限、SAS の有効期間を制御できます。
詳しくは、Azure Blob SAS を参照してください。
シンタックス
generateSas(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
blob |
SAS 権限を強制する Blob。 |
はい |
|
policy |
構造体には、次が含まれます。 permissions:共有アクセスポリシーで使用可能な権限の配列を指定します。有効な値は次のとおりです。
sharedAccessStartTime:アクセス権が付与される時間を指定します。 sharedAccessExpiryTime:アクセス権の有効期限が切れる時間を指定します。 |
はい |
|
headers |
構造体には、次が含まれます。
|
いいえ |
例
<cfscript>
// Shared Access Signature(SAS)により、データのセキュリティを損なわずに、
// ストレージアカウントのリソースに対する安全な委任アクセスが可能になります。
// SAS を使用すると、クライアントによるデータへのアクセスをきめ細かく制御できます。
// 特に、クライアントからアクセス可能なリソース、それらのリソースに対するクライアントの権限、
// SAS の有効期間を制御できます。
storageService = getCloudService(application.blobCred, application.blobConf)
object1="root-object1"
root = storageService1.container("#object1#",true)
FileWrite("#ExpandPath('./')#file.txt","Sgt.Pepper's Lonely Hearts Club Band")
src = "file.txt"
blobName = "key1"
uploadRequest = {
"srcFile" : src,
"blobName" : blobName
}
uploadResponse = root.uploadFile(uploadRequest)
expdate= DatePart("d",now())+2;
month= DatePart("m",now())
year= DatePart("yyyy",now())
startdate=DatePart("d",now());
sasRequest ={
"blobName" : "key1",
"policy" : {
"permissions" : ["READ"],
"sharedAccessExpiryTime" : "#month#/#Expdate#/#year#",
"sharedAccessStartTime" : "#month#/#startdate#/#year#"
}
}
sharedAccessSignature = root.generateSas(sasRequest);
writedump(sharedAccessSignature)
</cfscript>
ディレクトリのアップロード
Blob のディレクトリをアップロードします。また、一括アップロードを実行することもできます。
シンタックス
uploadDirectory(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
prefix |
指定された接頭辞で始まるディレクトリのみを選択します。 |
いいえ |
|
directoryPath |
アップロード元のディレクトリ。 |
はい |
|
isIncludeSubDirectories |
true または false。メインのフォルダー内にサブディレクトリを含めるかどうかを指定します。 |
いいえ |
例
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
object1="root-object1"
//writeDump(rootList)
FileWrite("#ExpandPath('./')#/uploadfile.txt","This txt file is used to upload and download functionality for azure blob storage.")
src = "uploadfile.txt"
destination = "download.txt"
blobName = "key1"
uploadRequest = {
"srcFile" : src,
"blobName" : blobName
}
root = storageService.container("#object1#",true);
uploadResponse = root.uploadFile(uploadRequest);
writeDump(uploadResponse)
</cfscript>
リースの獲得
Blob のリースを使用すると、Blob に対する所有権を付与できます。リースを付与されると、Blob を更新したり Blob を削除したりできます。Blob がリースされると、他のプロセスによる読み取りはできますが、更新しようとすると失敗します。
詳しくは、Blob コンテナ - リースを参照してください。
シンタックス
acquireLease(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
leaseTimeInSeconds |
リースの継続時間。 |
はい |
|
proposedLeaseID |
Blob に作成されたリースの ID。 |
いいえ |
例
<cfscript> // リースを獲得し、リース獲得ステータスを確認storageService = getCloudService(application.blobCred, application.blobConf)
object1="root-object1"
root = storageService1.container("#object1#",true);
FileWrite("#ExpandPath('./')#/uploadfile.txt","Coldfusion2020 lease-related operation.");
src = "uploadfile.txt"
blobName = "key1"
uploadRequest = {
"srcFile" : src,
"blobName" : blobName
}
uploadResponse = root.uploadFile(uploadRequest)
acquireLeaseRequest = {
"blobName":blobName,
"leaseDurationInSeconds": 15,
"proposedLeaseId": "lease01"
}
acqLeaseResponse=root.acquireLease(acquireLeaseRequest)
writeDump(acqLeaseResponse)
</cfscript>
リースの更新
Blob に対するリースを獲得すると、リースを更新できます。
シンタックス
renewLease(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
leaseTimeInSeconds |
リースを更新するまでの継続時間。 |
はい |
|
proposedLeaseID |
リースの ID。 |
いいえ |
例
<cfscript>
// リースを獲得し、リース獲得ステータスを確認。
object1="root-object1"
storageService1 = getCloudService(application.blobCred, application.blobConf)
root = storageService1.container("#object1#",true);
// リースを獲得し、リース獲得ステータスを確認。
Dirpath=#ExpandPath( ".")#&"/"
root = storageService1.container("#object1#",true);
FileWrite("#Dirpath#uploadfile.txt","Coldfusion2020 lease related operation");
src = "uploadfile.txt"
blobName = "key1"
uploadRequest = {
"srcFile" : src,
"blobName" : blobName
}
uploadResponse = root.uploadFile(uploadRequest)
acquireLeaseRequest = {
"blobName":blobName,
"leaseDurationInSeconds": 15,
"proposedLeaseId": "dddddddddddddddddddddddddddddddd"
}
root.acquireLease(acquireLeaseRequest)
// 既存のリースを更新
sleep(16000)
renewLeaseRequest = {
"blobName":blobName,
"accessCondition" : { "leaseID" :"dddddddddddddddddddddddddddddddd" }
}
renewLeaseResponse=root.renewLease(renewLeaseRequest)
writeDump(renewLeaseResponse)
</cfscript>
リースの変更
Blob に対するリースを獲得すると、リースを更新できます。
シンタックス
changeLease(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
leaseTimeInSeconds |
リースを変更するまでの継続時間。 |
はい |
|
proposedLeaseID |
リースの ID。 |
いいえ |
例
<cfscript>
// リースを獲得し、リース獲得ステータスを確認。
object1="root-object1"
storageService1 = getCloudService(application.blobCred, application.blobConf)
root = storageService1.container("#object1#",true);
// リースを獲得し、リース獲得ステータスを確認。
Dirpath=#ExpandPath( ".")#&"/"
root = storageService1.container("#object1#",true);
FileWrite("#Dirpath#uploadfile.txt","Coldfusion 2020 lease related operation");
src = "uploadfile.txt"
blobName = "key1"
uploadRequest = {
"srcFile" : src,
"blobName" : blobName
}
uploadResponse = root.uploadFile(uploadRequest)
// リースを獲得
acquireLeaseRequest = {
"blobName":blobName,
"leaseDurationInSeconds": 15,
"proposedLeaseId": "dddddddddddddddddddddddddddddddd"
}
root.acquireLease(acquireLeaseRequest)
// 既存のリースを変更
changeLeaseRequest = {
"blobName":blobName,
"proposedLeaseId": "ddddddddddddddcccccccccccccccccc",
"accessCondition" : { "leaseID" :"ddddddddddddddddcddddddddddddddd" }
}
changeleaseid=root.changeLease(changeLeaseRequest)
writeDump(changeleaseid)
</cfscript>
リースの解放
以前獲得した Blob のリースを変更できます。
シンタックス
releaseLease(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
blobPath |
リースを更新する必要がある Blob のパス。 |
はい |
|
leaseID |
リースの ID。 |
いいえ |
例
<cfscript>
// リースを獲得し、リース獲得ステータスを確認。
object1="root-object1"
storageService1 = getCloudService(application.blobCred, application.blobConf)
root = storageService1.container("#object1#",true);
// リースを獲得。
Dirpath=#ExpandPath( ".")#&"/"
root = storageService1.container("#object1#",true);
FileWrite("#Dirpath#uploadfile.txt","Coldfusion2020 lease related operation");
src = "uploadfile.txt"
blobName = "key1"
uploadRequest = {
"srcFile" : src,
"blobName" : blobName
}
uploadResponse = root.uploadFile(uploadRequest)
acquireLeaseRequest = {
"blobName":blobName,
"leaseDurationInSeconds": 60,
"proposedLeaseId": "dddddddddddddddddddddddddddddddd"
}
root.acquireLease(acquireLeaseRequest)
// 既存のリースを解放
changeLeaseRequest = {
"blobName":blobName,
"accessCondition" : { "leaseID" :"dddddddddddddddddddddddddddddddd" }
}
releaseResponse=root.releaseLease(changeLeaseRequest)
writeDump(releaseResponse)
</cfscript>
リースの停止
リースを終了できます。現在のリース期間が終了するまで、他のユーザーは新しいリースを獲得できません。
シンタックス
breakLease(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
blobPath |
リースを終了する必要がある Blob のパス。 |
はい |
|
leaseID |
リースの ID。 |
いいえ |
例
<cfscript>
// リースを獲得し、リース獲得ステータスを確認。
object1="root-object1"
storageService1 = getCloudService(application.blobCred, application.blobConf)
root = storageService1.container("#object1#",true);
// リースを獲得。
Dirpath=#ExpandPath( ".")#&"/"
root = storageService1.container("#object1#",true);
FileWrite("#Dirpath#uploadfile.txt","Coldfusion2020 lease related operation");
src = "uploadfile.txt"
blobName = "key1"
uploadRequest = {
"srcFile" : src,
"blobName" : blobName
}
uploadResponse = root.uploadFile(uploadRequest)
acquireLeaseRequest = {
"blobName":blobName,
"leaseDurationInSeconds": 60,
"proposedLeaseId": "dddddddddddddddddddddddddddddddd"
}
root.acquireLease(acquireLeaseRequest)
// 既存のリースを停止
breakleaserequest = {
"blobName":blobName,
"accessCondition" : { "leaseID" :"dddddddddddddddddddddddddddddddd" }
}
breakLeaseResponse=root.breakLease(breakleaserequest)
writeDump(breakLeaseResponse)
</cfscript>
クライアント側の暗号化
ColdFusion では、Blob のアップロード時に RSA 暗号化キーを使用できます。同じ Blob をダウンロードする間、同じ RSA 暗号化キーをパスワードと共に提供する必要があります。
Azure Storage に保存されたすべてのデータは、アップロード前に自動的に暗号化され、取得中に復号化されます。暗号化および復号化は、ユーザーに対して完全に透過的です。すべてのデータが 256 bit AES 暗号化を使用して暗号化されます。デフォルトで暗号化が有効なので、アプリケーションに対して変更を加える必要はありません。
getKeyPairfromkeystore
お使いのコンピューターにあるキーストアからキーペアをインポートします。
JKS またはキーストアは、暗号化されたセキュリティファイルです。暗号化キーまたは証明書のセットをバイナリ形式で保存するのに使用され、開くのにパスワードが必要です。
シンタックス
getKeyPairfromkeystore(parameterStruct)
パラメーター
|
パラメーター |
説明 |
|---|---|
|
keystore |
キーストアまたは JKS ファイルの位置。 |
|
keystorePassword |
JKS ファイルのパスワード。 |
|
keypairPassword |
RSA キーペアのパスワード。 |
|
keystoreAlias |
JKS キーストアのエイリアス名。 |
|
keyStoreType |
JKS または PKCS12。 |
例 - P12 キー
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
keyPair2 = getKeyPairfromkeystore({
"keystore": ExpandPath("blobkey.p12"),
"keystorePassword": "changeit"
})
// ルートを作成
rootobject = storageService.root("root001",true);
uploadRequestsstruct ={
"object" : "Encryption 001",
"key" : "key001",
"type" :"json",
"options" : {
"encryption":{
"keypair": keyPair2,
"kid": "sample"
}
}
}
uploadResponse = rootobject.uploadObject(uploadRequest=uploadRequestsstruct)
writeDump(uploadResponse)
</cfscript>
例 - JKS キー
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// ルートを作成
rootobject = storageService.root("root002",true)
// jks 構造体を作成
keyPair2 = getKeyPairfromkeystore({
"keystore": ExpandPath("blobkey.jks"),
"keystorePassword": "changeit",
"keypairPassword": "changeit",
"keystoreAlias": "alias3",
"keyStoreType": "jks"
})
// アップロード構造体を作成
uploadRequestsstruct ={
"object" : "Object 002",
"key" : "key",
"type" :"json",
"options" : {
"encryption":{ "keypair": keyPair2, "kid": "sample" }}
}
uploadResponse = rootobject.uploadObject(uploadRequest=uploadRequestsstruct)
writeDump(uploadResponse)
</cfscript>
P12 キーを使用したオブジェクトのダウンロード
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// キーペア構造体を作成
keyPair2 = getKeyPairfromkeystore({
"keystore": ExpandPath("blobkey.p12"),
"keystorePassword": "changeit"
})
// ルートを作成
rootobject = storageService.root("root003",true);
// アップロード構造体
uploadRequestsstruct ={
"object" : "Test string azureb blob for encryption",
"key" : "key",
"type" :"json",
"options" : {
"encryption":{ "keypair": keyPair2, "kid": "sample" }}
}
uploadResponse = rootobject.uploadObject(uploadRequest=uploadRequestsstruct);
// ダウンロード構造体
downloadStruct = {
"key" : "key",
"type" :"json",
"options" : {"encryption":{ "keypair": keyPair2, "kid": "sample" }}
}
try{
downloadResponse =rootobject.downloadObject(downloadStruct)
if(downloadResponse.object=="Test string azureb blob for encryption" &&
uploadResponse.status=="success" &&
downloadResponse.status=="success")
writeOutput("Object downloaded successfully")
}
catch(any e)
{
writeDump(e)
}
</cfscript>
JKS キーを使用したオブジェクトのダウンロード
<cfscript>
storageService = getCloudService(application.blobCred, application.blobConf)
// ルートを作成
rootobject = storageService.root("root004",true)
// キーペア構造体を作成
keyPair2 = getKeyPairfromkeystore({
"keystore": ExpandPath("blobkey.jks"),
"keystorePassword": "changeit",
"keypairPassword": "changeit",
"keystoreAlias": "alias3",
"keyStoreType": "jks"
})
// オブジェクトアップロード構造体を作成
uploadRequestsstruct ={
"object" : "Test string azureb blob for encryption",
"key" : "key",
"type" :"json",
"options" : {
"encryption":{ "keypair": keyPair2, "kid": "sample" }}
}
uploadResponse = rootobject.uploadObject(uploadRequest=uploadRequestsstruct);
// オブジェクトダウンロード構造体を作成
downloadObject = {
"key" : "key",
"type" :"json",
"options" : {
"encryption":{ "keypair": keyPair2, "kid": "sample" }}
}
try{
downloadResponse =rootobject.downloadObject(downloadObject)
if(
downloadResponse.object=="Test string azureb blob for encryption" &&
uploadResponse.status=="success" &&
downloadResponse.status=="success")
writeOutput("Object downloaded successfully")
}
catch(any e)
{
writeDump(e);
}
</cfscript>
ブロックのファイルのアップロード
blockUpload メソッドを使用して、大量のデータのアップロードを最適化します。ブロック Blob は、ブロックで構成され、各ブロックはブロック ID で識別されます。
詳しくは、ブロック Blob を参照してください。
シンタックス
blockUpload(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
blockId |
アップロードする Blob のブロックの ID。 |
はい |
|
blobName |
アップロードする Blob の名前。 |
はい |
|
srcFile |
アップロードされるファイルのパス。 |
はい |
例
<cfscript>
try{
blobAccount = getcloudService(application.blobCred, application.blobConf);
rootList = blobAccount.listAll()
for (i=1;i LTE ArrayLen(rootList);i=i+1)
{
if( (rootList[i].name eq "testcontainer") ){
blobAccount.delete(rootList[i].name)
sleep(35000)
}
}
root = blobAccount.container("testcontainer", true);
blobname = "Suite.zip"
createPartFileRequest = {
"srcFile":blobname,
"blockSizeInBytes": 102400,
"destinationDirectory": "Destination"
}
respt = root.createPartFiles(createPartFileRequest)
blockIds = ArrayNew(1);
blockIdItr = "ddd"
count=1
for(partFile in respt["partFiles"]) {
bid=""&(1000 + count) //toBase64(URLEncodedFormat("ddd"&count))
structUpload = {
"blockId": bid,
"blobName": blobName,
"srcFile": partFile
}
respt = root.blockUpload(structUpload);
arrayAppend(blockIds, bid)
count=count+1
}
commitBlockList = {
"blockIds": blockIds,
"blobName": blobName
}
respt = root.commitBlockList(commitBlockList);
if(respt.status=="SUCCESS")
writeOutput("Successful upload!")
}
catch(any e)
{
writeDump(e)
}
</cfscript>
Blob メタデータのアップロード
このメソッドは、Blob のメタデータの詳細をアップロードするのに使用されます。
シンタックス
uploadMetadata(parameterStruct)
パラメーター
|
パラメーター |
説明 |
必須 |
|---|---|---|
|
key |
Blob に関連付けられたキー。 |
はい |
|
metadata |
次を含む構造体。
|
はい |
例
<cfscript>
try{
storageService1 = getcloudService(this.blobCred, this.blobConf);
rootList = storageService1.listAll()
for (i=1;i LTE ArrayLen(rootList);i=i+1)
{
if( (i GT 0 )){
storageService1.delete(rootList[i].name)}
}
sleep(35000)
rootobject = storageService1.root("#object1#",true);
FileWrite("#Dirpath#UploadTest.txt","Test1.txt uploaded")
src = "UploadTest.txt"
key = "A/B/Test1"
uploadRequest = {
"srcFile" : src,
"key" : key
}
uploadResponse = rootobject.uploadFile(uploadRequest);
uploadMetadata = {
"key" : "A/B/Test1",
"metadata" : {
"Details" : "Test1.txt uploaded"
}
}
response =rootobject.uploadMetadata(uploadMetadata);
writeoutput(response.status&" ");
blobStruct = {
"prefix" : "",
"isFlatListing" : "true",
"listingDetails" :["METADATA"]
}
rootList = rootobject.listAll(blobStruct)
if(rootList.response[1].metadata["Details"] EQ "Test1.txt uploaded")
{
writeoutput("Uploaded successfully")
}
}
catch(any e)
{
writedump(e);
}
</cfscript>
複数のブロックへのファイルの分割
createPartFiles メソッドは、ファイルを複数のブロックでアップロードする際に、ファイルを複数のブロックに分割するのに使用されます。
シンタックス
createPartFiles(parameterStruct)
パラメーター
- srcFile
- blockSizeInBytes
- destinationDirectory
例
<cfscript>
try{
blobAccount = getcloudService(application.blobCred, application.blobConf);
rootList = blobAccount.listAll()
for (i=1;i LTE ArrayLen(rootList);i=i+1)
{
if( (rootList[i].name eq "testcontainer") ){
blobAccount.delete(rootList[i].name)
sleep(35000)
}
}
root = blobAccount.container("testcontainer", true);
blobname = "Suite.zip"
createPartFileRequest = {
"srcFile":blobname,
"blockSizeInBytes": 102400,
"destinationDirectory": "Destination"
}
respt = root.createPartFiles(createPartFileRequest)
blockIds = ArrayNew(1);
blockIdItr = "ddd"
count=1
for(partFile in respt["partFiles"]) {
bid=""&(1000 + count) //toBase64(URLEncodedFormat("ddd"&count))
structUpload = {
"blockId": bid,
"blobName": blobName,
"srcFile": partFile
}
respt = root.blockUpload(structUpload);
arrayAppend(blockIds, bid)
count=count+1
}
commitBlockList = {
"blockIds": blockIds,
"blobName": blobName
}
respt = root.commitBlockList(commitBlockList);
if(respt.status=="SUCCESS")
writeOutput("Successful upload!")
}
catch(any e)
{
writeDump(e)
}
</cfscript>
すべてのコミットブロックのリスト表示
commitBlockList メソッドは、すべてのコミットブロックをリスト表示します。
シンタックス
createPartFiles(parameterStruct)
パラメーター
- blockIds
- blobName
例
<cfscript>
try{
blobAccount = getcloudService(application.blobCred, application.blobConf);
rootList = blobAccount.listAll()
for (i=1;i LTE ArrayLen(rootList);i=i+1)
{
if( (rootList[i].name eq "testcontainer") ){
blobAccount.delete(rootList[i].name)
sleep(35000)
}
}
root = blobAccount.container("testcontainer", true);
blobname = "perfSuite.zip"
createPartFileRequest = {
"srcFile":blobname,
"blockSizeInBytes": 102400,
"destinationDirectory": "Destination"
}
respt = root.createPartFiles(createPartFileRequest)
blockIds = ArrayNew(1);
blockIdItr = "ddd"
count=1
for(partFile in respt["partFiles"]) {
bid=""&(1000 + count) //toBase64(URLEncodedFormat("ddd"&count))
structUpload = {
"blockId": bid,
"blobName": blobName,
"srcFile": partFile
}
respt = root.blockUpload(structUpload);
arrayAppend(blockIds, bid)
count=count+1
}
commitBlockList = {
"blockIds": blockIds,
"blobName": blobName
}
respt = root.commitBlockList(commitBlockList);
if(respt.status=="SUCCESS")
writeOutput("Uploaded")
}
catch(any e)
{
writeDump(e)
}
</cfscript>