【发布时间】:2021-10-28 15:10:17
【问题描述】:
我创建了一个存储事件触发器来触发 Azure 数据工厂中的管道。当我手动将文件放入数据湖时,此触发器起作用。但是从 Azure Function 上传文件时,触发器不起作用。
以下是我在datalake中上传文件的功能。
public void UploadFileToDatalake(FileUpload file, string containerSasUri, string stage, string dir, ILogger log)
{
log.LogInformation("inside uploadFileTodatalake");
UriBuilder sasUri = new UriBuilder(containerSasUri);
DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClient(sasUri.Uri);
string container = Globals._transientContainer;
var fileSystemClient = dataLakeServiceClient.GetFileSystemClient(container);
string pathFileDL = file.Name;
string directory = dir;
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
sw.Write(File.ReadAllText(file.FullPath));
sw.Flush();
ms.Seek(0, SeekOrigin.Begin);
file.Content = ms;
DataLakeDirectoryClient directoryClient = fileSystemClient.GetDirectoryClient(directory);
try
{
if (directoryClient.Exists())
{
log.LogInformation(directoryClient.Name);
DataLakeFileClient fileClient = directoryClient.CreateFile(pathFileDL); // 0kb blob
file.Content.Position = 0;
fileClient.Upload(file.Content, true);
log.LogInformation($"{stage}: {file.Name} uploaded to {pathFileDL}");
file.Content.Close();
}
}
finally
{
//fileSystemClient.Delete();
}
}
FileUpload 是我正在使用的模型类。
public class FileUpload
{
public string Name { get; set; }
public Stream Content { get; set; }
public string FullPath { get; set; }
}
提前致谢。
【问题讨论】:
-
我在这里意识到了我的错误。 FlieClient 首先创建一个空 blob,然后写入该 blob。这导致触发器出现问题。因此,我使用 BlobClient 而不是 FileClient,它得到了解决。
标签: c# .net azure-functions azure-data-factory-2 azure-data-lake-gen2