【发布时间】:2019-12-20 19:43:57
【问题描述】:
我正在使用 nodeJS 和 Azure 函数。我正在尝试获取 blob(pptx)的内容,然后进一步使用该 pptx(使用 admzip 解压缩)。
但是,每当我尝试获取内容时,该功能都会停止而没有任何错误,并且在一段时间后会超时。我尝试首先获取 blob 的属性(以检查 blob 是否存在)并且有效。
这是我的功能:
const storage = require('azure-storage');
const STORAGE_ACCOUNT_NAME = 'storage-account';
const ACCOUNT_ACCESS_KEY = 'storage-key';
let AdmZip = require('adm-zip');
let fs = require('file-system');
const blobService = storage.createBlobService(STORAGE_ACCOUNT_NAME, ACCOUNT_ACCESS_KEY);
module.exports = function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
getBlobProperties('default-powerpoint', 'download.pptx').then((properties) => {
context.log('Properties: ', properties);
getBlobContent('default-powerpoint', 'download.pptx').then((content) => {
context.log('Blob Content: ', content);
})
});
};
function getBlobProperties(containerName, fileName) {
return new Promise((resolve, reject) => {
blobService.getBlobProperties(
containerName,
fileName,
function (err, properties, status) {
if (err) {
reject(err);
} else {
resolve(properties);
}
});
})
}
function getBlobContentAsStream(containerName, fileName, res) {
return new Promise((resolve, reject) => {
blobService.getBlobToStream(containerName, fileName, res, function (err, results) {
if (err) {
reject(err);
} else {
resolve(JSON.stringify(results, null, 2));
}
});
})
}
function getBlobContent(containerName, blobName) {
return new Promise((resolve, reject) => {
blobService.getBlobToText(
containerName,
blobName,
function (err, blobContent, blob) {
if (err) {
reject(err);
} else {
resolve({
'content': blobContent,
'blob': blob
});
}
});
})
}
如您所见,我尝试了getBlobToStream 和getBlobToText,但结果相同。 getBlobProperties 工作正常,我得到了关于 blob 的所有信息,只是没有内容。
谁能帮我获取 blob 的内容。
编辑:
如果有人感兴趣,这是属性的输出:
BlobResult {
container: 'default-powerpoint',
name: 'download.pptx',
metadata: {},
lastModified: 'Wed, 14 Aug 2019 08:28:16 GMT',
creationTime: 'Wed, 14 Aug 2019 08:28:16 GMT',
etag: '"something"',
blobType: 'BlockBlob',
contentLength: '4658',
serverEncrypted: 'true',
requestId: 'someID',
contentSettings: { contentType: 'image/jpeg' },
lease: { status: 'unlocked', state: 'available' },
copy:
{ id: 'id123',
status: 'success',
source: 'sourceURL',
progress: '4658/4658',
bytesCopied: 4658,
totalBytes: 4658,
completionTime: 'Wed, 14 Aug 2019 08:28:16 GMT' } }
【问题讨论】:
-
可能不相关,但为什么您的内容类型是 'image/jpeg' ?
-
这也是运行时 v1 还是 v2?以及哪个版本的节点?
-
@AdamMarczak 其节点版本 11.9 和运行时版本:2.0.12641.0 (~2)。内容类型可以忽略(我添加了一张图片,看看它是否与 powerpoint 类型有关,忘记添加 pptx 的输出,但尽管内容类型输出完全相同,稍后会更新)
-
请记住,在 2.0 中,您需要调用
context.done();或导出异步函数module.exports = async function。但我不确定这是不是一个问题,我回家后会检查一下。 -
@AdamMarczak 谢谢!我将尝试 context.done() 并更新输出
标签: node.js azure azure-functions azure-blob-storage