如何解决Azure 存储 blob 库将 blob 下载到本地计算机
我正在学习本教程并尝试了解如何在本地计算机上下载 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();
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。