javascript - 从 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;
}
});
解决方案
无法直接使用您的 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);
推荐阅读
- c++ - 如何使用最终的 libserdes 将 Kafka 消息反序列化为 Avro 结构?
- c# - 从特定数字获取枚举
- memory - Recast.AI 中的内存不会自动刷新
- android - 将数据从片段发送到另一个片段
- angular - Angular 6:如何使用 FormGroup 动态创建 formControlName?
- javascript - Sending all electron HTTP requests through a proxy.
- r - 如何使用 for 循环在 r 中对我的代码进行矢量化?
- knockout.js - Uncaught ReferenceError: myMethod is not defined
- ios - Observe a property from a viewController
- laravel-5.7 - Laravel caching Database queries