Я использую NodeJS и Azure Storage SDK, у меня проблема с тем, что файлы, которые я загружаю в мои большие двоичные объекты, создаются как файлы размером 0 КБ, если я не добавляю промежуточную функцию для ее задержки, чтобы создать большой двоичный объект дозагрузка происходит.Я получаю те же результаты при загрузке в виде потока или локального файла из хранилища Azure.
У меня есть следующая функция:
async function uploadToBlob(localFilePath) {
//ACTIVATE CREDENTIALS AND CONTAINER
const credentials = new SharedKeyCredential(STORAGE_ACCOUNT_NAME, ACCOUNT_ACCESS_KEY);
const pipeline = StorageURL.newPipeline(credentials);
const serviceURL = new ServiceURL(`https://${STORAGE_ACCOUNT_NAME}.blob.core.windows.net`, pipeline);
const containerURL = ContainerURL.fromServiceURL(serviceURL, containerName);
const aborter = Aborter.timeout(30 * ONE_MINUTE);
//UPLOAD IMAGE
var blobName = localFilePath.substring(localFilePath.lastIndexOf('/') + 1 );
var fullBlobName = category + "/" + subcategory + "/" + blobName;
var blobURL = await BlockBlobURL.fromContainerURL(containerURL, fullBlobName);
await uploadImage(aborter, containerURL, localFilePath, blobURL)
}
, где я получаю переменную blobURL с помощьювыполняет ожидание для BlockBlobURL.fromContainerURL и, как вы можете видеть, имеет ожидание, а также есть ожидание при вызове uploadImage.
Затем здесь вызывается функция, которая вызывает uploadFileToBlockBlob из лазуриsdk:
//UPLOAD IMAGE NO-STREAM
async function uploadImage(aborter, containerURL, filePath, blobURL, blobName) {
try {
filePath = path.resolve(filePath);
//THIS LINE MAKES IT WORK
await showBlobNames(aborter, containerURL);
addToDB(blobName, blobURL.url);
console.log("Calling uploadFileToBlockBlob with filePath: " + filePath +
" and blobURL: "+ blobURL.url)
return await uploadFileToBlockBlob(aborter, filePath, blobURL);
}
catch(err) {
console.log(err)
}
}
В этой последней функции я добавил
await showBlobNames(aborter, containerURL);
, и это заставило ее работать.
Похоже, что ранее файл загружался доБыл создан BLOB-объект, и изображения загружались с правильным именем и в BLOB-файл, но в виде файлов размером 0 КБ, и добавление этой функции задерживает его, чтобы можно было создать BLOB-объект.
Я не понимаю, почему предыдущийожидание не заставляет загрузку ждать, пока большой объект не будет создан.Я также попытался поместить вызов загрузки в функцию обратного вызова, но он был бы выполнен при создании большого двоичного объекта, но, кажется, не поддерживается (не вызывает функцию обратного вызова)
У меня это работает, добавляя вызов showBlobNamesно я чувствую, что мой код не должен полагаться на это, и я хочу узнать, почему ожидание не работает.
Спасибо