Я пытаюсь написать приложение nodejs, которое загружает изображения в большой двоичный объект Azure, чтобы затем другая программа могла подключиться к БД и загрузить изображение.
У меня возникли проблемы с кодом, полученным изкапли API.Я думаю, что загрузка работает правильно, но я не могу загрузить изображение с указанного URL.
async function execute() {
const containerName = "a00008";
const blobName = "myBlob";
const content = "./sun.png";
const localFilePath = "./sun.png";
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);
await showContainerNames(aborter, serviceURL);
await containerURL.create(aborter);
await uploadLocalFile(aborter, containerURL, content);
console.log(`Local file "${content}" is uploaded`);
await uploadStream(aborter, containerURL, localFilePath);
console.log(`Local file "${localFilePath}" is uploaded as a stream`);
const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, content);
console.log("The blobs URL is: " + JSON.stringify(blockBlobURL.url));
const downloadResponse = await blockBlobURL.download(aborter, 0);
downloadedContent = downloadResponse.readableStreamBody.read(content.length)
console.log(`Downloaded blob content: "${downloadedContent}"`);}
execute().then(() => console.log("Done")).catch((e) => console.log(e));
Вот код для uploadLocalFile и uploadLocalStream, которые они непосредственно взяты из документов MS azure:
async function uploadLocalFile(aborter, containerURL, filePath) {
filePath = path.resolve(filePath);
const fileName = path.basename(filePath);
const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, fileName);
return await uploadFileToBlockBlob(aborter, filePath, blockBlobURL);
}
async function uploadStream(aborter, containerURL, filePath) {
filePath = path.resolve(filePath);
const fileName = path.basename(filePath).replace('.md', '-stream.md');
const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, fileName);
const stream = fs.createReadStream(filePath, {
highWaterMark: FOUR_MEGABYTES,
});
const uploadOptions = {
bufferSize: FOUR_MEGABYTES,
maxBuffers: 5,
};
return await uploadStreamToBlockBlob(
aborter,
stream,
blockBlobURL,
uploadOptions.bufferSize,
uploadOptions.maxBuffers);
}
Я попробовал оба uploadLocalFile и uploadStream. Я комментирую 1 из них и пробую другой сам, не уверенный, какой из них правильный для изображений.
Если я перейду кblockBlobURL Я получаю сообщение об ошибке: этот XML-файл не имеет никакой информации о стиле, связанной с ним.Дерево документа показано ниже.
А также, когда я console.log выводит содержимое BLOB-объекта: Загруженное содержимое BLOB-объекта: «NPNG → с этим странным символом? Перед PNG и стрелкой после него.
Вот вывод:
Так что я не уверен, что я делаю неправильно, я думаю, что я загружаю правильно (не уверен, должен ли я использовать uploadLocalFile илиuploadLocalStream хотя, но я думаю, что загрузка работает успешно), что я делаю не так с загрузкой, правда, я лично не буду загружать файлы, просто делаю это, чтобы убедиться, что это работает, другая программа, которая подключается к БД, будетзагрузить файл. Также, если вы видите ссылку для большого двоичного объекта после того, как a0008 имеет /./, и когда я размещаю эту ссылку в браузере, она удаляет эту часть, я не знаю, что означает эта часть /./.
Спасибо