gpt4 book ai didi

Azure 函数 python : BlobTrigger starts when stream is empty

转载 作者:行者123 更新时间:2023-12-03 06:18:58 30 4
gpt4 key购买 nike

我正在尝试实现一个管道,每个步骤都会在 blob 容器中写入一个文件。

步骤:

  • pdf 触发一个函数,提取文本并将其保存为容器中的 txt
  • 提取的文本会触发一个函数来完善结果并在容器中写入第三个文件

有时第二步(大多数)会失败,因为第一步生成的 txt 文件的流看起来是空的(实际上不是)。

我没有任何预算,因此无法使用 Azure 中的服务总线或事件中心。我认为触发器是通过轮询启动的。

有人知道如何解决这个问题或者我应该从哪里开始寻找吗?

最佳答案

从我这边复制后,当我按照以下过程进行操作时,效果很好。我创建了 2 个 Blob 触发器函数,其中一个是将 pdf 转换为 txt 文件,另一个是读取 txt 文件,执行所需的操作,然后保存到另一个容器。

pdf triggers a function that extracts the text and saves it as txt in the container

Function1.cs - 读取 pdf 文件并将其另存为容器中的文本文件

enter image description here

using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;

namespace FunctionApp5
{
public class Function1
{
[FunctionName("Function1")]
public void Run([BlobTrigger("pdfcontainer/{name}", Connection = "constr")]Stream myBlob, string name,
[Blob("textcontainer/1.txt", FileAccess.Write, Connection = "constr")] Stream outputBlob,ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
PdfReader reader = new PdfReader(myBlob);
int intPageNum = reader.NumberOfPages;
string[] words;
string line;
string text;

for (int i = 1; i <= intPageNum; i++)
{
text = PdfTextExtractor.GetTextFromPage(reader, i, new LocationTextExtractionStrategy());
using (var writer = new StreamWriter(outputBlob))
{
writer.Write(text);
}
}
}
}
}

结果:

enter image description here

<小时/>

the extracted text triggers a function that polishes the result and write a third file in the container

Function2.cs - 读取上传的文本文件并进行一些操作并将其保存到另一个容器

using System.IO;
using System.Text;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;

namespace FunctionApp5
{
public class Function2
{
[FunctionName("Function2")]
public void Run([BlobTrigger("textcontainer/{name}", Connection = "constr")] Stream myBlob, string name,
[Blob("finalcontainer/1.txt", FileAccess.Write, Connection = "constr")] Stream outputBlob, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");

string finalValue;

using (var reader = new StreamReader(myBlob, Encoding.UTF8))
{
finalValue = reader.ReadLine();
}

using (var writer = new StreamWriter(outputBlob))
{
writer.Write(finalValue.ToUpper());
}
}
}
}

结果:

enter image description here

enter image description here

关于Azure 函数 python : BlobTrigger starts when stream is empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76029932/

30 4 0