我创建了一个存储事件触发器来启动 Azure 数据工厂中的管道。我知道它配置得很好,因为我可以在通过 UI 手动上传 Blob 后成功触发它。但是使用 TypeScript 和下面的脚本,可以成功创建 blob,但事件触发器不起作用。我读到我们需要使用 Flush 方法,但不确定如何在 TypeScript 中完成。
这是我正在使用的代码:
import { BlobServiceClient } from "@azure/storage-blob"
async function handleWriteToBlob(blobData, insurance) {
const jsonData = sendJson(blobData);
const containerName = "raw-layer";
const fileName = blobData['timestamp'];
const blobName = `/folder_name/${insurance}/${insurance}-insurance_form-${fileName.toISOString()}.json`;
const blobServiceClient = new BlobServiceClient(`https://${accountName}.blob.core.windows.net?${sasToken}`);
const containerClient = blobServiceClient.getContainerClient(containerName)
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
const options = {
blobHTTPHeaders: {
blobContentType: 'application/json'
},
bufferThreshold: 4 * 1024 * 1024, // 4MB
maxBuffers: 20 // 80MB
};
const result = await blockBlobClient.upload(
jsonData,
jsonData.length,
options
);
if (result.errorCode) {
throw Error(result.errorCode);
}
console.log(`Uploaded BlockBlob ${blobName} successfully as: ${jsonData}`);
}
function sendJson(blobData) {
console.log(`${JSON.stringify(blobData)}`);
return JSON.stringify(blobData);
}
不幸的是,在研究了这个主题之后,似乎“存储事件触发器”仅在我们将文件上传到 blob 存储时才起作用,而当文件通过编程方式发送时(至少使用 npm 模块)则不起作用。
只有 2 个选项,如下所述:
选项 A(使用 Typescript)
使用 Azure EventGrid 节点包发布您的事件,上传文件后,使用与我的问题中相同的代码
选项 B(使用 REST API)
Microsoft.Storage.BlobCreated
创建或替换 Blob 时触发。具体来说,当客户端使用 Blob REST API 中可用的 PutBlob、PutBlockList 或 CopyBlob 操作以及完全提交块 Blob 时,会触发此事件。