gpt4 book ai didi

azure - 使用门户同时将文件上传到 Azure 文件共享,并使用 ShareClient 库作为 WebJob 下载文件

转载 作者:行者123 更新时间:2023-12-03 02:32:18 25 4
gpt4 key购买 nike

我有一个计划的 WebJob,每 5 分钟触发一次。

  1. 它使用 ShareClient 库检查 Azure 文件共享中是否有任何文件。
  2. 如果文件可用,则 WebJob 会下载该文件并删除原始文件。
  3. 因此,当有一个大文件从门户上传到文件共享时(>2GB,上传需要约 1 分钟且未挂载文件共享)
  4. 同时WebJob被触发并开始运行,WebJob发现正在上传的文件,并且正在下载此时已上传的部分文件内容。
  5. 其余内容未下载。

在这种情况下如何下载整个文件?是否可以在文件完全上传后才下载?

示例代码:

var shareItems = shareDirectory.GetFilesAndDirectories().Where(item => item.IsDirectory == false).ToList();
foreach (var item in shareItems)
{
ShareFileClient file = shareDirectory.GetFileClient(item.Name);
if (await file.ExistsAsync())
{
string filePath = Path.Combine(destPath, item.Name);
using (FileStream stream = File.OpenWrite(filePath))
{
try
{
ShareFileDownloadInfo download = await file.DownloadAsync();
download.Content.CopyTo(stream);
}
catch (Exception ex)
{
throw;
}
stream.Flush();
stream.Close();
}
}
//Delete the original file from file share
file.Delete();
}

最佳答案

根据我的理解,您需要确保只有一个大文件已完全上传才能下载。如果是这样,也许您可​​以检查文件上次修改时间戳和当前 UTC 时间戳之间的时间差距。

如果正在上传文件,其 LastModified 属性会一直变化,根据我的测试,当前 UTC 时间戳之间的差距约为 1-3 秒。

所以你可以试试这个:

var shareItems = shareDirectory.GetFilesAndDirectories().Where(item => item.IsDirectory == false).ToList();
foreach (var item in shareItems)
{
ShareFileClient file = shareDirectory.GetFileClient(item.Name);
if (file.ExistsAsync().GetAwaiter().GetResult())
{

var fileLastModifiedTime = file.GetProperties().Value.LastModified;
var currentTime = DateTime.UtcNow;

//Only download files that have finished uploading 5 minutes ago
if (fileLastModifiedTime.AddMinutes(5).CompareTo(currentTime) < 0) {

string filePath = Path.Combine(destPath, item.Name);
using (FileStream stream = File.OpenWrite(filePath))
{
try
{
ShareFileDownloadInfo download = file.DownloadAsync().GetAwaiter().GetResult();
download.Content.CopyTo(stream);
}
catch (Exception ex)
{
throw;
}
stream.Flush();
stream.Close();
}
}

关于azure - 使用门户同时将文件上传到 Azure 文件共享,并使用 ShareClient 库作为 WebJob 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64608872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com