【Microsoft Azure】Blob StorageにアップロードしたコンテンツのURLを取得する (JavaScript)

こんにちは。この記事では、Azure Blob Storageに画像などのコンテンツをアップロードした後に、そのBlobのURLを取得する方法についてまとめておこうと思います。

なお、言語はJavaScript (Node.js)です。

それでは早速参ります。

BlobのURLを取得する方法

結論、blockBlobClientのgetPropertiesメソッドから取得できました!

https://docs.microsoft.com/ja-jp/javascript/api/@azure/storage-blob/blockblobclient?view=azure-node-latest#getProperties_BlobGetPropertiesOptions_

<コード>

こんな感じで、コンテンツをアップロードしたのち、blockBlobClientオブジェクトが持つgetProperties()メソッドを呼ぶことでBlobの様々な情報が取得できます。

const blobServiceClient = BlobServiceClient.fromConnectionString(process.env["CONNSTR"]);
const containerClient = blobServiceClient.getContainerClient(containerName);
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
const uploadBlobResponse = await blockBlobClient.upload(parts[0].data, parts[0].data.length);

context.log("Blob was uploaded successfully. requestId: ", uploadBlobResponse.requestId);

const blobUrl = await blockBlobClient.getProperties();
context.log(blobUrl)

ちなみに、getPropertiesで取得できた情報のサンプルを以下に載せておきます。めっちゃたくさんの情報を取得できるんですね・・・

欲しいURL情報は、”url”プロパティにありました。

{
"lastModified": "2021-10-02T03:47:20.000Z",
"createdOn": "2021-10-02T03:47:20.000Z",
"metadata": {},
"objectReplicationRules": {},
"blobType": "BlockBlob",
"leaseState": "available",
"leaseStatus": "unlocked",
"contentLength": 107467,
"contentType": "application/octet-stream",
"etag": "\"0x8D985575650767C\"",
"contentMD5": {
"type": "Buffer",
"data": [
162,
194,
182,
96,
39,
107,
211,
151,
91,
80,
18,
31,
92,
72,
21,
96
]
},
"clientRequestId": "b5ae52ad-3a21-4aee-a827-b0f7c5c636bd",
"requestId": "f16941ac-d01e-0015-1440-b70562000000",
"version": "2020-08-04",
"date": "2021-10-02T03:47:19.000Z",
"acceptRanges": "bytes",
"isServerEncrypted": true,
"accessTier": "Hot",
"accessTierInferred": true,
"versionId": "2021-10-02T03:47:20.6418600Z",
"isCurrentVersion": true,
"body": true,
"_response": {
"headers": {
"_headersMap": {
"accept-ranges": {
"name": "accept-ranges",
"value": "bytes"
},
"content-length": {
"name": "content-length",
"value": "107467"
},
"content-md5": {
"name": "content-md5",
"value": "osK2YCdr05dbUBIfXEgVYA=="
},
"content-type": {
"name": "content-type",
"value": "application/octet-stream"
},
"date": {
"name": "date",
"value": "Sat, 02 Oct 2021 03:47:19 GMT"
},
"etag": {
"name": "etag",
"value": "\"0x8D985575650767C\""
},
"last-modified": {
"name": "last-modified",
"value": "Sat, 02 Oct 2021 03:47:20 GMT"
},
"server": {
"name": "server",
"value": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0"
},
"x-ms-access-tier": {
"name": "x-ms-access-tier",
"value": "Hot"
},
"x-ms-access-tier-inferred": {
"name": "x-ms-access-tier-inferred",
"value": "true"
},
"x-ms-blob-type": {
"name": "x-ms-blob-type",
"value": "BlockBlob"
},
"x-ms-client-request-id": {
"name": "x-ms-client-request-id",
"value": "b5ae52ad-3a21-4aee-a827-b0f7c5c636bd"
},
"x-ms-creation-time": {
"name": "x-ms-creation-time",
"value": "Sat, 02 Oct 2021 03:47:20 GMT"
},
"x-ms-is-current-version": {
"name": "x-ms-is-current-version",
"value": "true"
},
"x-ms-lease-state": {
"name": "x-ms-lease-state",
"value": "available"
},
"x-ms-lease-status": {
"name": "x-ms-lease-status",
"value": "unlocked"
},
"x-ms-request-id": {
"name": "x-ms-request-id",
"value": "f16941ac-d01e-0015-1440-b70562000000"
},
"x-ms-server-encrypted": {
"name": "x-ms-server-encrypted",
"value": "true"
},
"x-ms-version": {
"name": "x-ms-version",
"value": "2020-08-04"
},
"x-ms-version-id": {
"name": "x-ms-version-id",
"value": "2021-10-02T03:47:20.6418600Z"
}
}
},
"request": {
"streamResponseStatusCodes": {},
      "url": "https://<blobstoragename>.blob.core.windows.net/<containername>/<filename>",
"method": "HEAD",
"headers": {
"_headersMap": {
"x-ms-version": {
"name": "x-ms-version",
"value": "2020-08-04"
},
"accept": {
"name": "accept",
"value": "application/xml"
},
"x-ms-encryption-algorithm": {
"name": "x-ms-encryption-algorithm",
"value": "AES256"
},
"user-agent": {
"name": "user-agent",
"value": "azsdk-js-storageblob/12.6.0 (NODE-VERSION v14.16.0; Windows_NT 10.0.14393)"
},
"x-ms-client-request-id": {
"name": "x-ms-client-request-id",
"value": "b5ae52ad-3a21-4aee-a827-b0f7c5c636bd"
},
"x-ms-date": {
"name": "x-ms-date",
"value": "Sat, 02 Oct 2021 03:47:20 GMT"
},
"authorization": {
"name": "Authorization",
"value": "xxx"
},
"cookie": {
"name": "Cookie",
"value": ""
}
}
},
"withCredentials": false,
"timeout": 0,
"keepAlive": true,
"decompressResponse": false,
"requestId": "b5ae52ad-3a21-4aee-a827-b0f7c5c636bd",
"operationSpec": {
"path": "/{containerName}/{blob}",
"httpMethod": "HEAD",
"responses": {
"200": {
"headersMapper": {
"serializedName": "Blob_getPropertiesHeaders",
"type": {
"name": "Composite",
"className": "BlobGetPropertiesHeaders",
"modelProperties": {
"lastModified": {
"serializedName": "last-modified",
"xmlName": "last-modified",
"type": {
"name": "DateTimeRfc1123"
}
},
"createdOn": {
"serializedName": "x-ms-creation-time",
"xmlName": "x-ms-creation-time",
"type": {
"name": "DateTimeRfc1123"
}
},
"metadata": {
"serializedName": "x-ms-meta",
"xmlName": "x-ms-meta",
"type": {
"name": "Dictionary",
"value": {
"type": {
"name": "String"
}
}
},
"headerCollectionPrefix": "x-ms-meta-"
},
"objectReplicationPolicyId": {
"serializedName": "x-ms-or-policy-id",
"xmlName": "x-ms-or-policy-id",
"type": {
"name": "String"
}
},
"objectReplicationRules": {
"serializedName": "x-ms-or",
"xmlName": "x-ms-or",
"type": {
"name": "Dictionary",
"value": {
"type": {
"name": "String"
}
}
},
"headerCollectionPrefix": "x-ms-or-"
},
"blobType": {
"serializedName": "x-ms-blob-type",
"xmlName": "x-ms-blob-type",
"type": {
"name": "Enum",
"allowedValues": [
"BlockBlob",
"PageBlob",
"AppendBlob"
]
}
},
"copyCompletedOn": {
"serializedName": "x-ms-copy-completion-time",
"xmlName": "x-ms-copy-completion-time",
"type": {
"name": "DateTimeRfc1123"
}
},
"copyStatusDescription": {
"serializedName": "x-ms-copy-status-description",
"xmlName": "x-ms-copy-status-description",
"type": {
"name": "String"
}
},
"copyId": {
"serializedName": "x-ms-copy-id",
"xmlName": "x-ms-copy-id",
"type": {
"name": "String"
}
},
"copyProgress": {
"serializedName": "x-ms-copy-progress",
"xmlName": "x-ms-copy-progress",
"type": {
"name": "String"
}
},
"copySource": {
"serializedName": "x-ms-copy-source",
"xmlName": "x-ms-copy-source",
"type": {
"name": "String"
}
},
"copyStatus": {
"serializedName": "x-ms-copy-status",
"xmlName": "x-ms-copy-status",
"type": {
"name": "Enum",
"allowedValues": [
"pending",
"success",
"aborted",
"failed"
]
}
},
"isIncrementalCopy": {
"serializedName": "x-ms-incremental-copy",
"xmlName": "x-ms-incremental-copy",
"type": {
"name": "Boolean"
}
},
"destinationSnapshot": {
"serializedName": "x-ms-copy-destination-snapshot",
"xmlName": "x-ms-copy-destination-snapshot",
"type": {
"name": "String"
}
...(truncated to the first 10000 characters)

なお、よりセキュアにするために、SAS URLを取得したい場合もあるかと思います。今回試していませんが、同様にblockBlobClientのgenerateSasUrlメソッドが活用できそうです。

https://docs.microsoft.com/ja-jp/javascript/api/@azure/storage-blob/blockblobclient?view=azure-node-latest#generateSasUrl_BlobGenerateSasUrlOptions_

短いですが、以上、BlobのURLを取得する方法でした!この記事が少しでもお役に立ちましたら、下のいいねボタンをポチっていただけますと励みになります!

おしまい

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。