我有一个用java编写的azure函数,它从输入绑定中提取zip文件。我想将所有提取的文件存储到azure blob容器中,所以我使用@bloboutput绑定。输出绑定仅将一个文件带到azure容器中的存储。我希望所有文件的名称相同,因为它是在zip文件。
以下是我所做的:
@FunctionName("QueueTriger")
public void execute(@QueueTrigger(name = "httpQueue", dataType = "", queueName = "queuetest", connection = "AzureWebJobsStorage") Details message,
@BlobInput(
name = "file",
dataType = "binary", connection = "AzureWebJobsStorage",
path = "zipfiles/test.zip") byte[] content,
@BlobOutput(
name = "target",
dataType = "binary",
path = "output/sample",
connection = "AzureWebJobsStorage") OutputBinding<byte[]> output,
final ExecutionContext executionContext) throws IOException {
InputStream targetStream = new ByteArrayInputStream(content);
ZipInputStream zipIn = new ZipInputStream(targetStream);
ZipEntry zipEntry = zipIn.getNextEntry();
while(zipEntry != null) {
executionContext.getLogger().info("ZipEntry Name: " + zipEntry.getName());
ByteArrayOutputStream outputB = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int n;
while ((n = zipIn.read(buf, 0, 1024)) != -1) {
outputB.write(buf, 0, n);
}
output.setValue(outputB.toByteArray());
zipEntry = zipIn.getNextEntry();
}
zipIn.close();
}
上面的代码是装箱一个文件样本,其中保存了zip文件中的最后一个文件内容。但我的期望是,示例文件夹应该包含所有在zip中的文件,这些文件的名称与它们在zip中的名称相同。
1条答案
按热度按时间4xy9mtcn1#
上面的代码是装箱一个文件样本,其中保存了zip文件中的最后一个文件内容。但我的期望是,示例文件夹应该包含所有在zip中的文件,这些文件的名称与它们在zip中的名称相同。
同一容器中不能有多个同名文件。代码只上载最后一个文件的原因是,稍后上载到存储器的文件将覆盖具有相同名称的前一个文件。