【发布时间】:2020-02-06 22:09:16
【问题描述】:
这是我的第一个 Azure 函数。在将文件上传到 Azure 存储 Blob 后,我需要对其进行解压缩。
我找到了这个视频https://www.youtube.com/watch?v=GRztpy337kU 和这个帖子:https://msdevzone.wordpress.com/2017/07/07/extract-a-zip-file-stored-in-azure-blob。
使用带有 C# 的 Visual Studio 2017,当我在 Visual Studio 中运行该函数时一切正常,但当我将它部署到 Azure 时,没有提取任何内容。如果我看日志,一切似乎都很好。
这是我的代码:
using System;
using System.IO;
using System.IO.Compression;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.WindowsAzure.Storage;
namespace ExtractZipFunction
{
public static class ScompattaZip
{
[FunctionName("ScompattaZip")]
public static void Run([BlobTrigger("input-files/{name}", Connection = "connectionStorage")]
Stream myBlob, string name, TraceWriter log)
{
log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
try
{
string destinationStorage = Environment.GetEnvironmentVariable("destinationStorage");
string destinationContainer = Environment.GetEnvironmentVariable("destinationContainer");
log.Info($"destinationStorage: {destinationStorage}");
log.Info($"destinationContainer: {destinationContainer}");
if (System.IO.Path.GetExtension(name).ToLower() == ".zip")
{
log.Info("It's a zip");
var archive = new ZipArchive(myBlob);
var storageAccount = CloudStorageAccount.Parse(destinationStorage);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(destinationContainer);
foreach (var entry in archive.Entries)
{
var blockBlob = container.GetBlockBlobReference(entry.FullName);
using (var fileStream = entry.Open())
{
if (entry.Length > 0)
{
log.Info($"Estrazione 1 - {entry.FullName}");
blockBlob.UploadFromStreamAsync(fileStream);
log.Info($"Estrazione 2 - {entry.FullName}");
}
}
}
}
else
log.Info("Not a zip");
}
catch (Exception ex)
{
log.Info($"Errore: {ex.Message}");
}
}
}
}
这是 Azure 中的日志:
C# Blob trigger function Processed blob
Name:EmptyJSONFile_1033.zip
Size: 24294 Bytes
destinationStorage: DefaultEndpointsProtocol=https;AccountName=[...]
destinationContainer: outputfiles
E' uno zip
Estrazione EmptyJSONFile_1033.ico
Estrazione 1 - EmptyJSONFile_1033.ico
Estrazione 2 - EmptyJSONFile_1033.ico
Estrazione EmptyJSONFile_1033.vstemplate
Estrazione 1 - EmptyJSONFile_1033.vstemplate
Estrazione 2 - EmptyJSONFile_1033.vstemplate
Estrazione json.json
Estrazione 1 - json.json
Estrazione 2 - json.json
看起来一切正常,但在函数结束时容器输出文件为空!
我做错了什么?
【问题讨论】:
-
首先:请帮自己一个大忙,使用输出绑定(这是函数的“魔力”的很大一部分;))docs.microsoft.com/en-us/azure/azure-functions/… 使用例如 CloudBlobDirectory 作为输出绑定
-
谢谢。我快速阅读了链接,但我不明白如何在我的情况下使用 CloudBlobDirectory
-
我稍后会整理一个例子
-
查看修改后的答案。我添加了一个完整的例子
标签: c# azure azure-functions