Azure Functions의 Azure SDK for Nodejs를 사용하여 SAS가 포함된 Blob URL 가져오기

준비


Kudu Azure SDK for Node를 사용합니다.설치 js
참고 자료
Azure Functions에서 npm 모듈 사용

실시

var azure = require("azure");

//ここを書き換える
var storageAccount = "your-storage-account";
var storageAccessKey = "your-storage-access-key";
var container = "your-container-name";
//ここを書き換える

var blobService = azure.createBlobService(storageAccount, storageAccessKey);


function getSAS(context, blob) {


    var startDate = new Date();
    startDate.setMinutes(startDate.getMinutes() - 5 );
    var expiryDate = new Date(startDate);
    expiryDate.setMinutes(startDate.getMinutes() + 10);


    context.log("blobService: " + JSON.stringify(blobService.host));
    context.log("startDate: " + startDate.toISOString());
    context.log("expiryDate: " + expiryDate.toISOString());


    var sharedAccessPolicy = {
        AccessPolicy: {
            Permissions: azure.Constants.BlobConstants.SharedAccessPermissions.READ,
            Start: startDate.toISOString(),
            Expiry: expiryDate.toISOString()
        }
    };

    context.log(JSON.stringify(sharedAccessPolicy));

    var signature = blobService.generateSharedAccessSignature(container, blob, sharedAccessPolicy);
    console.log("signature: " + signature);

    return signature;

}


module.exports = function(context, req) {
    context.log("Node.js HTTP trigger function processed a request. RequestUri=%s", req.originalUrl);

    var fileKey;

    if (req.query.fileKey|| (req.body && req.body.fileKey)) {
        fileKey = (req.query.fileKey || req.body.fileKey);
    }

    if (!fileKey) {
        context.res = {
            status: 400,
            body:  { result: "ng", error: "Please pass a fileKey on the query string or in the request body" }
        };
        context.done();
        return;
    }


    var sas = getSAS(context, fileKey);
    var url = blobService.getUrl(container,fileKey,sas);

    console.log(url);

    var responceBody = {
        url: url
    };

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responceBody
    };

    context.done();

};
위의 예에서는 현재 시점의 5분 전부터 10분 동안 유효한 SAS를 발행합니다.

실행 시 요구 사항 본문 (예)

{
    "fileKey": "sastestdir/sastestfile.txt"
}

여러 액세스 정책 권한 지정

var sharedAccessPolicy = {
        AccessPolicy: {
            Permissions: azure.Constants.BlobConstants.SharedAccessPermissions.READ + azure.Constants.BlobConstants.SharedAccessPermissions.LIST,
            Start: startDate.toISOString(),
            Expiry: expiryDate.toISOString()
        }
    };
.READ는 문자열의 "r",LIST가 "l"이니까.
인삼으로 연결해서 건네주면 돼.
Permissions를 변경하면 쿼리 문자열의 sp=r 또는 sp=rl
url 확인 가능합니다.
만약 무슨 잘못이 있거나 이렇게 하는 것이 더 좋다면 반드시 댓글에 지적하고 건의해 주십시오

좋은 웹페이지 즐겨찾기