我创建了一个在创建或更新Blob存储时触发的函数。 我的Blob结构: container / a-123 / b-123 / c-1-2-3
而123是动态值
这是我的功能
public class BlobTriggerFunction {
/**
* This function will be invoked when a new or updated blob is detected at the specified path. The blob contents are provided as input to this function.
*/
@FunctionName("blobtriggerfunction")
@StorageAccount("connection")
public static void run(
@BlobTrigger(name = "container", path = "container") CloudBlockBlob cloudBlockBlob,
@BindingName("name") String name,
final ExecutionContext context
) {
context.getLogger().info(cloudBlockBlob.getUri().toString());
context.getLogger().info(name);
}
}
我总是收到错误
执行'Functions.blobtriggerfunction'(原因='检测到新斑点:container / u-123 / c-123 / m-1-2-3-a50a-025592397574',ID = 6b9ae40c-f92b-46d4-8c1- 41791167c355) 无法使用给定的输入找到方法签名 System.Private.CoreLib:执行函数:Functions.blobtriggerfunction时发生异常。 System.Private.CoreLib:结果:失败 异常:无法使用给定的输入找到方法签名 堆栈:java.lang.NoSuchMethodException:无法找到具有给定输入的方法签名 在com.microsoft.azure.functions.worker.broker.JavaMethodExecutor.lambda $ execute $ 0(JavaMethodExecutor.java:49) 在java.util.Optional.orElseThrow(Optional.java:290) 在com.microsoft.azure.functions.worker.broker.JavaMethodExecutor.execute(JavaMethodExecutor.java:49) 在com.microsoft.azure.functions.worker.broker.JavaFunctionBroker.invokeMethod(JavaFunctionBroker.java:47) 在com.microsoft.azure.functions.worker.handler.InvocationRequestHandler.execute(InvocationRequestHandler.java:33) 在com.microsoft.azure.functions.worker.handler.InvocationRequestHandler.execute(InvocationRequestHandler.java:10) 在com.microsoft.azure.functions.worker.handler.MessageHandler.handle(MessageHandler.java:45) 在com.microsoft.azure.functions.worker.JavaWorkerClient $ StreamingMessagePeer.lambda $ onNext $ 0(JavaWorkerClient.java:91) 在java.util.concurrent.ForkJoinTask $ AdaptedRunnableAction.exec(ForkJoinTask.java:1386) 在java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) 在java.util.concurrent.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1056) 在java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) 在java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
我的方法签名有什么问题,我坚持下去。 非常感谢您的帮助。
答案 0 :(得分:2)
java blob触发器不支持数据类型CloudBlockBlob
。因此,除非在函数中使用azure storage sdk,否则无法获取blob网址。
我们可以将String
,byte[]
,POJO类用于Java blobtrigger内容绑定。参见Document。
例如
@BlobTrigger(name = "content", path = "container/{name}", dataType="Binary") byte[] content
请注意,如果要使用Blob名称,则应在路径后附加/{name}
,否则会出现相同的错误。
并且我建议您使注释参数name
的值与传入的Blob名称相同(因为我将它们都设置为content
)。不必使功能正常工作,而是为了更好地理解。