从 Url 将 .vhd 作为 Page-Blob 上传到 azure-blob-storage
Posted
技术标签:
【中文标题】从 Url 将 .vhd 作为 Page-Blob 上传到 azure-blob-storage【英文标题】:Upload .vhd as Page-Blob to azure-blob-storage from Url 【发布时间】:2021-06-16 04:46:27 【问题描述】:我有一堆 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;
);
【问题讨论】:
uploadPagesFromURL
中的 url 是源 blob 的特定 URL。这意味着如果它是公开的,则 url 看起来像 https://myaccount.blob.core.windows.net/mycontainer/myblob
,如果它不是公开的,则 url 看起来像 https://myaccount.blob.core.windows.net/mycontainer/myblob?sas-token
。是否要上传与存储无关的url,例如i.stack.imgur.com/sc74e.png?
嘿@Pamela Peng 你附上的图片,当我查看它时是空白的,但我猜我理解你正确。是的,我要使用的 url 独立于存储,并使用用户名和密码的基本身份验证。
【参考方案1】:
不可能使用您的 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);
【讨论】:
这适用于大文件吗?我正在下载的 vhd 可能非常大。 (>16GB) 恐怕时间会比较长,可能会返回异常。我们通常把大Blob用API,你可以参考sample。 我想我只需要尝试一下,时间“应该”不是太大的问题,我现在只是将超时设置得非常高,看看会发生什么。谢谢!以上是关于从 Url 将 .vhd 作为 Page-Blob 上传到 azure-blob-storage的主要内容,如果未能解决你的问题,请参考以下文章