BLOB一覧の取得
ファイルのアップロードが完了すると、BLOB一覧画面(http://localhost/list)にリダイレクトされます。リスト11とリスト12は、BLOB一覧画面の処理です。
// BLOB一覧
app.get('/list', routes.listblobs);
exports.listblobs = function(req, res) {
//(1)BLOBの一覧取得
blob.client.listBlobs(BLOB.CONTAINER, function(err, blobs) {
res.render('list.ejs', {
title : 'BLOB一覧',
blobs : blobs});
});
};
(1)のlistBlobsメソッドは指定したコンテナは配下のBLOB一覧を取得します。BLOBの一覧は第2引数のblobs変数に配列として代入されるので、テンプレート側で一覧を表示しています(リスト13)。
<% for (var i = 0; i < blobs.length; i++) { %>
<tr>
<td><%= i+1 %></td>
<td><a href="<%= blobs[i].url %>"><%= blobs[i].name %></a></td>
<td><form action="info/<%= blobs[i].name %>" method="get">
<input type="submit" value="情報"></form></td>
<td><form action="delete/<%= blobs[i].name %>" method="post">
<input type="submit" value="削除"></form></td>
</tr>
<% } %>
blobs変数blobsが配列として渡されるので、アップロードしたBLOBへのURLと、BLOB名を表示しています。
BLOBの削除
一覧画面の[削除]ボタンを押すと、http://localhost/delete/BLOB名でPOST処理が行われます(リスト14、リスト15)。
// BLOBの削除
app.post('/delete/:id', routes.deleteblob);
exports.deleteblob = function(req, res) {
var blobName = req.params.id;
// BLOBの削除
blob.client.deleteBlob(BLOB.CONTAINER, blobName, function(err) {
res.redirect('/list');
});
};
app.postの第2引数に指定された、「:id」はプレースホルダとして利用されreq.params.idに紐を付けられます。その情報を元に、指定されたBLOBをdeleteBlobメソッドで削除しています。
BLOBプロパティ情報の取得
一覧画面の[情報]ボタンを押すと、http://localhost/info/BLOB名でGET処理が行われます(リスト16、リスト17)。
// BLOBのプロパティ
app.get('/info/:id', routes.information);
exports.information = function(req, res) {
var blobName = req.params.id;
blob.client.getBlobProperties(BLOB.CONTAINER, blobName, function(err, blob, response) {
res.write(util.inspect(blob));
res.end();
});
};
削除処理と同様にURLに指定されたBLOB名を元にgetBlobPropertiesメソッドでBLOBのプロパティ情報を取得しています。図2では、メタデータとして設定した「onwer : 投稿者」が確認できるでしょう。
現在のところAzure SDK for Node.jsのAPIリファレンスは未整備です。したがってAPIの詳細を確認するには、ソースを参照するのが一番確実です。
まとめ
少し駆け足ではありましたが、ExpressとAzureストレージの利用方法について理解できたでしょうか。今回の例のようにすべてをNodeで行う必要は無いため、適材適所で組み合わせることによってAzureの利用方法が広がっていくと考えています。
