问题描述
我的程序使用PDFBox库从PDF中提取数据,然后根据数据重命名文件。它目前全部在本地,但是最终将需要部署为Azure功能。 PDF将存储在Azure Blob容器中-Azure Functions的Azure Blob存储触发器是选择此选项的重要原因。
我当然可以在本地下载blob并阅读它,但是该程序应仅在Cloud中运行。我尝试直接使用Java读取blob,但这导致数据混乱,并且与PDFBox不兼容。我目前的计划是将文件临时存储在云中的其他位置(例如OneDrive,Azure文件存储),然后尝试从那里打开它们。但是,这似乎可以很快变成一个过于混乱的解决方案。我的问题:
(1)有什么方法可以将blob作为文件而不是CloudBlockBlob打开,因此不需要此附加步骤吗?
(2)如果否,在这种情况下建议使用什么临时存储?
解决方法
由于您正在计划Azure函数,因此可以使用blob trigger/binding直接获取字节。然后,您可以使用PDFBox PdfDocument加载方法直接构建对象@FunctionName("blobprocessor")
public void run(
@BlobTrigger(name = "file",dataType = "binary",path = "myblob/{name}",connection = "MyStorageAccountAppSetting") byte[] content,@BindingName("name") String filename,final ExecutionContext context
) {
context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
PDDocument doc = PDDocument.load(content);
// do your stuffs
}
。您将不需要任何临时存储来存储文件以加载该文件。
{{1}}