使用@ azure / storage-blob将Blob从一个容器复制到另一个容器

时间:2020-08-07 07:36:02

标签: node.js azure-storage-blobs

我正在努力将blob复制到同一存储帐户中的另一个容器中。

    const mainContainerClient = this.blobServiceClient.getContainerClient(configuration.storage.MAIN_CONTAINER);

    const archiveContainerClient = this.blobServiceClient.getContainerClient(configuration.storage.ARCHIVE_CONTAINER);

    const blobs = mainContainerClient.listBlobsFlat();

    for await (const blob of await blobs) {
      let file = mainContainerClient.getBlockBlobClient(blob.name);
      const archiveBlobClient = archiveContainerClient.getBlobClient(blob.name);
      const newBlob = await archiveBlobClient.syncCopyFromURL(file.url);
    }

它与syncCopyFromURL一起使用,但仅当我使用手动生成的SAS令牌传递URL时才可用。我不确定如何使用SDK。

1 个答案:

答案 0 :(得分:0)

也许您可以尝试以下方法,您可以参考此link

    var storage = require("azure-storage")
    var startDate = new Date();
    var expiryDate = new Date();
    startDate.setTime(startDate.getTime() - 5*60*1000);
    expiryDate.setTime(expiryDate.getTime() + 24*60*60*1000);
    var AccountSasConstants = storage.Constants.AccountSasConstants;
    var sharedAccessPolicy = {
      AccessPolicy: {
        Services: AccountSasConstants.Services.BLOB ,
        ResourceTypes: AccountSasConstants.Resources.SERVICE + 
                       AccountSasConstants.Resources.CONTAINER +
                       AccountSasConstants.Resources.OBJECT,
        Permissions: AccountSasConstants.Permissions.READ + 
                     AccountSasConstants.Permissions.ADD +
                     AccountSasConstants.Permissions.CREATE +
                     AccountSasConstants.Permissions.WRITE +
                     AccountSasConstants.Permissions.DELETE +
                     AccountSasConstants.Permissions.LIST,
        Protocols: AccountSasConstants.Protocols.HTTPSORHTTP,
        Start: startDate,
        Expiry: expiryDate
      }
      
    };
    const accountname ="blobstorage0516";
    const key = "";
    var sas =storage.generateAccountSharedAccessSignature(accountname,key,sharedAccessPolicy);
    console.log(sas);

或者您可以直接生成网址

var azure = require('azure-storage');
var blobService = azure.createBlobService('storage connection');
// Create a SAS token that expires in an hour
    // Set start time to five minutes ago to avoid clock skew.
    var startDate = new Date();
    startDate.setMinutes(startDate.getMinutes() - 5);
    var expiryDate = new Date(startDate);
    expiryDate.setMinutes(startDate.getMinutes() + 60);

    permissions = azure.BlobUtilities.SharedAccessPermissions.READ;

    var sharedAccessPolicy = {
        AccessPolicy: {
            Permissions: permissions,
            Start: startDate,
            Expiry: expiryDate
        }
    };
    var container='test';
    var blobName='test.txt';
    var sasToken = blobService.generateSharedAccessSignature(container, blobName, sharedAccessPolicy);
    var url=blobService.getUrl(container,blobName,sasToken);
    console.log(url);