azure-functions - 如何将随机字符串添加到 Azure Function Blob 输出文件名?- 指定的阻止列表无效
问题描述
当以非快速循环调用 java 函数时,我的 Blob 输出工作成功。但是在快速循环中调用函数时会出错。由于 Java 不支持持久单例,我只需要让每个文件都有唯一的名称。
如何在名称中添加随机字符串或 guid,以便每个文件都获得唯一的名称,即使时间戳相同。
错误:
system.Private.CoreLib: Exception while executing function: Functions.TopicTriggerDatalakeOutput.
Microsoft.Azure.WebJobs.Host: Error while handling parameter _binder after function returned:.
Microsoft.WindowsAzure.Storage: The specified block list is invalid.
代码:
@BlobOutput(
name = "target",
connection = "DataLakeConnString",
path = "profile/blob_{DateTime}.csv")
OutputBinding<String> outputItem,
解决方案
基于 Java 的 Azure Function 声明部分中提供的 blob 名称必须是常量,因此如果要直接在绑定中为 blob 添加随机 GUID,这是不可能的。
但是你的想法还是可以实现的,只要把逻辑放到函数里面,就像这样:
String connectStr = "DefaultEndpointsProtocol=https;AccountName=0730bowmanwindow;AccountKey=xxx;EndpointSuffix=core.windows.net";
String containerName = "yourcontainername";
String fileName = "yourblobprefix" + java.util.UUID.randomUUID() + ".txt";
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectStr).buildClient();
BlobContainerClient containerClient = blobServiceClient.createBlobContainer(containerName);
BlobClient blobClient = containerClient.getBlobClient(fileName);
long streamlong = request.getBody().get().length();
String st = request.getBody().get();
InputStream inputstream = new ByteArrayInputStream(st.getBytes());
blobClient.upload(inputstream, streamlong, true);
你可以看看这个文档。它告诉您如何上传 blob,它基于 java v12 sdk。这是关于 java sdk v8 的。
推荐阅读
- javascript - 将数组位置与提示进行比较(javascript)
- javascript - 删除禁用属性以在 jquery 中提交按钮
- python - TypeError:“添加”类型的对象不是 JSON 可序列化的 - Python Graph
- javascript - 在 Javascript 控制台中使用所有应用程序的导入?
- javascript - 如果字符串匹配,则仅从字符串数组中获取数字
- javascript - Vuex 商店 - 回调不是函数
- reactjs - 如何使用 __mocks__ 目录中的 jest 模拟 react-router-dom
- c++ - 重载函数以使用右值引用而不是左值引用
- excel - Excel求和与积差和多条件
- javascript - 有条件地在组件中渲染 Firebase 数据