首页 > 解决方案 > 从 Url 将 .vhd 作为 Page-Blob 上传到 azure-blob-storage

问题描述

我有一堆 VHD 文件存储在私人服务器上,可通过 url 访问。

我正在尝试使用 azure javascript npm 库将这些 vhd 文件直接上传到我的 azure 存储帐户。vhd 必须作为页面 blob 上传。我尝试使用 pageblobClient 的方法 uploadPagesFromURL() 但没有成功。我的代码大致如下:

 async function uploadVHD(accessToken, srcUrl) 
 {
     try {
         // Get credentials from accessToken
         const creds = new StorageSharedKeyCredential(storageAccount.name, storageAccount.key);
         // Get blobServiceClient
         const blobServiceClient = new BlobServiceClient(`https://${storageAccount.name}.blob.core.windows.net`, creds);
    
         // Create Container
         const containerClient = blobServiceClient.getContainerClient("vhd-images");
         await containerClient.createIfNotExists();
    
         const src = srcUrl.replace('https://', 'https://username:password@');
           
         // Upload to blob storage
         const pageBlobClient = containerClient.getPageBlobClient("Test.vhd");
         // Get fileSize of vhd
         const fileSize = (await axiosRequest(src, { method: "HEAD" })).headers["content-length"];
         const uploadResponse = await pageBlobClient.uploadPagesFromURL(src, 0, 0, fileSize);
    
         return uploadResponse;
     } catch (error) {
           
         return error;
     }
 });

标签: javascripttypescriptazureazure-blob-storage

解决方案


无法直接使用您的 URL 上传 Page Blob。您需要从 url 读取数据。然后使用uploadPages方法上传。

axios.get(URL, {
    responseType: 'arraybuffer'
  })
    .then((response) => {
        console.log(response.data)
        console.log(response.data.length)
        // upload page blob...
    }).catch((error) => {
      //handle error
    });

// uploadPages method
const uploadResponse = pageBlobClient.uploadPages(data, 0, dataLength);

推荐阅读