使用 Java Azure Functions SDK 处理二进制数据

Posted

技术标签:

【中文标题】使用 Java Azure Functions SDK 处理二进制数据【英文标题】:Process Binary data with Java Azure Functions SDK 【发布时间】:2018-03-31 13:05:13 【问题描述】:

我想使用 Java Azure Functions SDK 来:

    接受 PDF 作为输入 处理 PDF(使用 pdfbox 库)。 返回更改后的 PDF。

最终结果应该是从一个队列中读取 PDF 并将处理后的 PDF 发布到另一个队列。

是否有使用 Java Azure Functions SDK 从队列读取/写入二进制数据的示例?

对于测试、调试和其他用途,最好有:

    通过 post 接受 PDF 的 http 触发器。如何在 Java 中做到这一点? 我目前不清楚如何在 http 触发器中使用 HttRequestMessage。

    1.1。我可以在 Http Trigger 中使用零参数或可选参数吗?

    1.2。使用 HttpRequestMessage 自己解析参数?

    您可以使用 HttpResponseMessage 作为返回类型并设置返回码。 不清楚如何将输出的mime-type设置为application/pdf。

我第一次尝试将有效的 html 作为字符串返回,但它被返回并呈现为纯文本/文本。

这样做的原因,使用触发器您不必设置队列。

【问题讨论】:

您使用的是 azure 存储队列,对吗? 【参考方案1】:

根据你的需要,我的建议可能分为以下几个步骤:

在您的 HttpTrigger Azure 函数中使用 Azure Storage Queue Java sdk。

第 1 步:从队列中接收二进制数据。

   // Setup the cloud storage account.
   CloudStorageAccount account = CloudStorageAccount.parse(storageConnectionString);

   // Create a queue service client
   CloudQueueClient queueClient = account.createCloudQueueClient();

   // Retrieve a reference to a queue
   // Append a random UUID to the end of the queue name so that this

   // sample can be run more than once in quick succession.
   CloudQueue queue = queueClient.getQueueReference("test");

  // Retrieve the first visible message in the queue
    CloudQueueMessage retrieveMessage = queue.retrieveMessage();

第 2 步:使用 pdfbox 库处理您的 pdf。

第 3 步:将二进制数据发送到队列中。

    // Setup the cloud storage account.
    CloudStorageAccount account = CloudStorageAccount.parse(storageConnectionString);

   // Create a queue service client
   CloudQueueClient queueClient = account.createCloudQueueClient();

   // Retrieve a reference to a queue
   // Append a random UUID to the end of the queue name so that this

   // sample can be run more than once in quick succession.
   CloudQueue queue = queueClient.getQueueReference("test");

   // Create messages and add it to the queue
   CloudQueueMessage message1 = new CloudQueueMessage("your pdf data");
                queue.addMessage(message1);

配置 HttpTrigger Azure 函数的输入和输出。

当然,Azure Function 支持zerooptional 参数。

第4步:你有两种配置inputoutput参数的方法:

1.注解

public class Function 
    public String echo(@HttpTrigger(name = "req", methods = "post",  authLevel = AuthorizationLevel.ANONYMOUS) 
        String req, ExecutionContext context) 
        return String.format(req);
    

2.function.json


  "scriptFile": "azure-functions-example.jar",
  "entryPoint": "com.example.MyClass.echo",
  "bindings": [
    
      "type": "httpTrigger",
      "name": "req",
      "direction": "in",
      "authLevel": "anonymous",
      "methods": [ "post" ]
    ,
    
      "type": "http",
      "name": "$return",
      "direction": "out"
    
  ]

您可以从here获取详细信息。

希望对你有所帮助。

【讨论】:

以上是关于使用 Java Azure Functions SDK 处理二进制数据的主要内容,如果未能解决你的问题,请参考以下文章

Azure Functions with java - 如何获取写入函数的日志?

添加 Azure 存储 Blob 容器输入绑定 Azure Functions Java

带有 IoT 中心的 Azure Functions 无法检索分区

Azure Functions 的 Azure 队列触发器:配置最小轮询间隔

将 FormData 对象读入 Java HTTP 触发的 Azure Functions

Azure Functions 中的孤立异步任务