Azure 函数、绑定名称和 Blob 客户端

问题描述 投票:0回答:1

我有一个具有 blob 触发器绑定名称的 Java azure 函数,我处理该文件并最终使用块客户端将文件写入不同的位置。 有时会观察到以下行为。将在使用 blob 客户端创建输出文件的位置中创建按输入文件名命名的 blob。 此行为与绑定名称有关吗?

public void run(@BlobTrigger( name = "file", path = "container/{name}", dataType = "binary") byte[] fileCont, 
@bindingName("name") String name,
final ExecutionContext context) { } 
java azure azure-functions
1个回答
0
投票

BlobTrigger 使用

{name}
占位符来获取 Blob 的名称,
@BindingName("name")
将其存储在 name 变量中以供使用,就像设置输出文件路径一样。

为了防止覆盖,请通过修改输入文件的名称来更改输出 blob 名称,避免冲突。

BlobTriggerJava.java:

import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
import com.azure.storage.blob.*;
import java.io.ByteArrayInputStream;

public class BlobTriggerJava {
    @FunctionName("BlobTriggerJava")
    @StorageAccount("AZURE_STORAGE")
    public void run(
            @BlobTrigger(name = "file", path = "kamcontainer/{name}", dataType = "binary") byte[] fileCont,
            @BindingName("name") String name,
            final ExecutionContext context
    ) {
        context.getLogger().info("Processing blob. Name: " + name + ", Size: " + fileCont.length + " bytes.");
        BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
                .connectionString(System.getenv("AZURE_STORAGE")) 
                .buildClient();
        String outputBlobPath = "outputblob/demokam-" + name; 
        BlobClient blobClient = blobServiceClient.getBlobContainerClient("outputblob")
                .getBlobClient("demokam-" + name);
        byte[] data = fileCont; 
        blobClient.upload(new ByteArrayInputStream(data), data.length, true);
        context.getLogger().info("Content successfully copied to " + outputBlobPath);
    }
}

local.setting.json:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "<Storeconnecstring>",
    "FUNCTIONS_WORKER_RUNTIME": "java",
    "AZURE_STORAGE": "<Storeconnecstring>"
  }
}

pom.xml:

<dependencies>
    <dependency>
        <groupId>com.microsoft.azure.functions</groupId>
        <artifactId>azure-functions-java-library</artifactId>
        <version>1.4.2</version>
    </dependency>
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-storage-blob</artifactId>
        <version>12.10.0</version> 
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.32</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.32</version>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>5.4.2</version>
        <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
         <version>2.23.4</version>
         <scope>test</scope>
    </dependency>
</dependencies>

输出:

以下 blob 触发函数成功运行,如下所示。

enter image description here

输入容器 blob 数据:

enter image description here

输出容器 blob 数据:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.