我遇到了一些奇怪的行为。 我必须将文件上传到 azure 存储,并且我正在使用 package 来上传。
OnProgress
回调完成意味着我的文件上传成功。
但是,一旦我调用 azure api 再次获取文件,它就不会返回最新上传的文件。
如果我在
setInterval
中调用 fetch api,那么在某些调用中我会收到此文件。
那么这与azure的并发性有关还是我在这里做错了什么?
const sassUrl = generateSasUrl() // to generate sasUrl
const azureClient = new ContainerClient(sassUrl).getBlobClient(fileName)
azureClient.uploadData(file , {
onProgress: ({loadedBytes}) => {
const isUploaded = loadedBytes === fileSize;
if(isUploaded){
fetchAzureFiles()
}
}
})
async function fetchAzureFiles(){
const url = `https://${accoutnName}/blob.core.windows.net/${containerName}`;
const containerClient = new ContainerClient(containerUrl, new ManagedIdentityCredential(clientId, UAMI_CLient_id));
const files = await containerClient.listAdlsFiles();
return files
}
我同意 Gaurav Mantri 的观点,感谢您的见解
这是我能够调用的方式,azure api再次获取文件,下面的代码将在将文件上传到容器后调用Azure API再次获取文件。这是因为文件上传后,在
fetchAzureFiles
函数中调用了 uploadFileToAzureStorage
函数。 fetchAzureFiles
函数检索容器中的文件列表,其中包括新上传的文件。
const { BlobServiceClient, StorageSharedKeyCredential } = require("@azure/storage-blob");
const accountName = "accountName";
const accountKey = "accountKey";
const containerName = "containerName";
const fileName = "example.txt";
const filePath = "./example.txt"; // Adjust the path based on the location of your file
async function uploadFileToAzureStorage() {
const sharedKeyCredential = new StorageSharedKeyCredential(accountName, accountKey);
const blobServiceClient = new BlobServiceClient(`https://${accountName}.blob.core.windows.net`, sharedKeyCredential);
const containerClient = blobServiceClient.getContainerClient(containerName);
const blockBlobClient = containerClient.getBlockBlobClient(fileName);
try {
await blockBlobClient.uploadFile(filePath);
console.log("File uploaded successfully.");
const fileList = await fetchAzureFiles();
console.log("Files in the container:", fileList);
} catch (error) {
console.error("Error uploading file:", error.message);
}
}
async function fetchAzureFiles() {
const sharedKeyCredential = new StorageSharedKeyCredential(accountName, accountKey);
const blobServiceClient = new BlobServiceClient(`https://${accountName}.blob.core.windows.net`, sharedKeyCredential);
const containerClient = blobServiceClient.getContainerClient(containerName);
const files = [];
try {
let marker = undefined;
do {
const response = await containerClient.listBlobFlatSegment(marker);
marker = response.nextMarker;
for (const blob of response.segment.blobItems) {
files.push(blob.name);
}
} while (marker);
return files;
} catch (error) {
console.error("Error fetching Azure files:", error.message);
throw error;
}
}
uploadFileToAzureStorage();
结果