我有一个具有 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) { }
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 触发函数成功运行,如下所示。
输入容器 blob 数据:
输出容器 blob 数据: