Azure 存储 blob 库将 blob 下载到本地计算机
Azure storage blob library download blob to local machine
我正在学习本教程并尝试了解如何在我的本地计算机上下载 blob 文件
这是一个使用 JavaScript 的网络应用程序。
下面几行代码运行良好,我可以在console.log中看到文件的内容
我希望用户能够将文件下载到他们的本地计算机,而不是在 console.log 中看到它。所以也许给个路径什么的。
我已经评论了我需要帮助的代码。它运行但什么也不做。我没有看到要下载到本地的消息。
const downloadFiles = async () => {
if (fileList.selectedOptions.length > 0) {
//reportStatus("downloading files...");
for (const option of fileList.selectedOptions) {
console.log("option.text", option.text);
try {
const blobClient = containerClient.getBlobClient(option.text);
console.log("BlobClient",blobClient)
// Hoping this line of code would do the trick
var blobResponse = await blobClient.downloadToFile(option.text);
//////
const downloadBlockBlobResponse = await blobClient.download();
console.log("downloadBlockBlobResponse", downloadBlockBlobResponse);
const downloaded = await blobToString(await downloadBlockBlobResponse.blobBody);
console.log("Downloaded blob to string content", downloaded);
// [Browsers only] A helper method used to convert a browser Blob into string.
async function blobToString(blob) {
const fileReader = new FileReader();
return new Promise((resolve, reject) => {
fileReader.onloadend = (ev) => {
resolve(ev.target.result);
};
fileReader.onerror = reject;
fileReader.readAsText(blob);
});
}
// [Node.js only] A helper method used to read a Node.js readable stream into a Buffer
async function streamToBuffer(readableStream) {
return new Promise((resolve, reject) => {
const chunks = [];
readableStream.on("data", (data) => {
chunks.push(data instanceof Buffer ? data : Buffer.from(data));
});
readableStream.on("end", () => {
resolve(Buffer.concat(chunks));
});
readableStream.on("error", reject);
});
}
}
catch (error) {
reportStatus(error.message);
}
}
reportStatus("Done.");
listFiles();
} else {
reportStatus("No files selected.");
}
/*
//const containerClient = blobServiceClient.getContainerClient(containerName);
//console.log("containerClient", containerClient);
const blobName = // "MyTest1.csv";
const blobClient = containerClient.getBlobClient(blobName);
console.log("blobClient", blobClient);
try {
const downloadBlockBlobResponse = await blobClient.download();
console.log("downloadBlockBlobResponse", downloadBlockBlobResponse);
const downloaded = await blobToString(await downloadBlockBlobResponse.blobBody);
console.log("Downloaded blob content", downloaded);
// [Browsers only] A helper method used to convert a browser Blob into string.
async function blobToString(blob) {
const fileReader = new FileReader();
return new Promise((resolve, reject) => {
fileReader.onloadend = (ev) => {
resolve(ev.target.result);
};
fileReader.onerror = reject;
fileReader.readAsText(blob);
});
}
} catch (error) {
reportStatus(error.message);
}
*/
};
downloadToFile
方法只能在node.js
运行时使用,所以不能用它下载文件到本地,可以参考downloadToFile.
您可以尝试以下方法下载文件:
const downloadFiles = async () => {
if (fileList.selectedOptions.length > 0) {
reportStatus("downloading files...");
for (const option of fileList.selectedOptions) {
console.log("option.text", option.text);
try {
const blobClient = containerClient.getBlobClient(option.text);
console.log("BlobClient",blobClient);
const downloadBlockBlobResponse = await blobClient.download();
const url =window.URL.createObjectURL(await downloadBlockBlobResponse.blobBody);
downloadURI(url,option.text)
console.log("Downloaded blob to string content", url);
}
catch (error) {
reportStatus(error.message);
}
}
reportStatus("Done.");
listFiles();
} else {
reportStatus("No files selected.");
}
};
downloadButton.addEventListener("click", downloadFiles);
function downloadURI(uri, name)
{
var link = document.createElement("a");
link.download = name;
link.href = uri;
link.click();
};
我正在学习本教程并尝试了解如何在我的本地计算机上下载 blob 文件
这是一个使用 JavaScript 的网络应用程序。
下面几行代码运行良好,我可以在console.log中看到文件的内容 我希望用户能够将文件下载到他们的本地计算机,而不是在 console.log 中看到它。所以也许给个路径什么的。
我已经评论了我需要帮助的代码。它运行但什么也不做。我没有看到要下载到本地的消息。
const downloadFiles = async () => {
if (fileList.selectedOptions.length > 0) {
//reportStatus("downloading files...");
for (const option of fileList.selectedOptions) {
console.log("option.text", option.text);
try {
const blobClient = containerClient.getBlobClient(option.text);
console.log("BlobClient",blobClient)
// Hoping this line of code would do the trick
var blobResponse = await blobClient.downloadToFile(option.text);
//////
const downloadBlockBlobResponse = await blobClient.download();
console.log("downloadBlockBlobResponse", downloadBlockBlobResponse);
const downloaded = await blobToString(await downloadBlockBlobResponse.blobBody);
console.log("Downloaded blob to string content", downloaded);
// [Browsers only] A helper method used to convert a browser Blob into string.
async function blobToString(blob) {
const fileReader = new FileReader();
return new Promise((resolve, reject) => {
fileReader.onloadend = (ev) => {
resolve(ev.target.result);
};
fileReader.onerror = reject;
fileReader.readAsText(blob);
});
}
// [Node.js only] A helper method used to read a Node.js readable stream into a Buffer
async function streamToBuffer(readableStream) {
return new Promise((resolve, reject) => {
const chunks = [];
readableStream.on("data", (data) => {
chunks.push(data instanceof Buffer ? data : Buffer.from(data));
});
readableStream.on("end", () => {
resolve(Buffer.concat(chunks));
});
readableStream.on("error", reject);
});
}
}
catch (error) {
reportStatus(error.message);
}
}
reportStatus("Done.");
listFiles();
} else {
reportStatus("No files selected.");
}
/*
//const containerClient = blobServiceClient.getContainerClient(containerName);
//console.log("containerClient", containerClient);
const blobName = // "MyTest1.csv";
const blobClient = containerClient.getBlobClient(blobName);
console.log("blobClient", blobClient);
try {
const downloadBlockBlobResponse = await blobClient.download();
console.log("downloadBlockBlobResponse", downloadBlockBlobResponse);
const downloaded = await blobToString(await downloadBlockBlobResponse.blobBody);
console.log("Downloaded blob content", downloaded);
// [Browsers only] A helper method used to convert a browser Blob into string.
async function blobToString(blob) {
const fileReader = new FileReader();
return new Promise((resolve, reject) => {
fileReader.onloadend = (ev) => {
resolve(ev.target.result);
};
fileReader.onerror = reject;
fileReader.readAsText(blob);
});
}
} catch (error) {
reportStatus(error.message);
}
*/
};
downloadToFile
方法只能在node.js
运行时使用,所以不能用它下载文件到本地,可以参考downloadToFile.
您可以尝试以下方法下载文件:
const downloadFiles = async () => {
if (fileList.selectedOptions.length > 0) {
reportStatus("downloading files...");
for (const option of fileList.selectedOptions) {
console.log("option.text", option.text);
try {
const blobClient = containerClient.getBlobClient(option.text);
console.log("BlobClient",blobClient);
const downloadBlockBlobResponse = await blobClient.download();
const url =window.URL.createObjectURL(await downloadBlockBlobResponse.blobBody);
downloadURI(url,option.text)
console.log("Downloaded blob to string content", url);
}
catch (error) {
reportStatus(error.message);
}
}
reportStatus("Done.");
listFiles();
} else {
reportStatus("No files selected.");
}
};
downloadButton.addEventListener("click", downloadFiles);
function downloadURI(uri, name)
{
var link = document.createElement("a");
link.download = name;
link.href = uri;
link.click();
};