AzureClient `onProgress' 回调提供文件上传状态,但是一旦我们调用 api 来获取文件,它就不会反映已上传的文件

问题描述 投票:0回答:1

我遇到了一些奇怪的行为。 我必须将文件上传到 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



 

}
reactjs azure azure-blob-storage azure-sdk
1个回答
0
投票

我同意 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();

结果 enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.