C# &引用;磁盘上没有足够的空间;my azure function应用程序从blob存储下载大文件时出错
我有一个azure function应用程序,它将文件从blob存储下载到临时文件夹,处理文件,然后将新文件上传到blob存储 这工作正常,除了当我尝试下载大视频(我正在测试的视频大约是600mb)时,在这种情况下,我得到一个磁盘空间不足的错误。下载较小的文件很好 如果我运行一些代码将可用的驱动器空间输出到日志中,我可以看到我下载文件的驱动器上有足够的可用空间(大约4GB可用空间) 我可以下载到函数应用程序的临时文件夹中的文件大小是否有限制?我在任何文档中都看不到这样的限制C# &引用;磁盘上没有足够的空间;my azure function应用程序从blob存储下载大文件时出错,c#,azure-functions,azure-blob-storage,C#,Azure Functions,Azure Blob Storage,我有一个azure function应用程序,它将文件从blob存储下载到临时文件夹,处理文件,然后将新文件上传到blob存储 这工作正常,除了当我尝试下载大视频(我正在测试的视频大约是600mb)时,在这种情况下,我得到一个磁盘空间不足的错误。下载较小的文件很好 如果我运行一些代码将可用的驱动器空间输出到日志中,我可以看到我下载文件的驱动器上有足够的可用空间(大约4GB可用空间) 我可以下载到函数应用程序的临时文件夹中的文件大小是否有限制?我在任何文档中都看不到这样的限制 下载的代码没有什么
下载的代码没有什么特别之处,但在这里它只是为了完成
using (WebClient webClient = new WebClient())
{
webClient.Headers.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");
webClient.DownloadFile(blobFileUri, filePath);
}
Azure功能的使用计划提供1GB的存储空间 发件人: 存储限制是临时存储中的总内容大小 跨同一应用程序服务计划中的所有应用程序。消费计划使用 用于临时存储的Azure文件 如果您已经使用了超过0.4GB的内存,并且它试图将0.6GB的文件写入临时存储,那么它可能会超过1GB并失败
premium计划提供250GB。如果您获得的临时目录如下所示:
string tmpFileName = Path.GetTempFileName();
string remoteTempDirectory = Environment.ExpandEnvironmentVariables(@$"%HOME%/render/{DateTime.Today:yyyy-MM-dd}-{Guid.NewGuid()}");
然后,您将在消费计划中获得大约500 MB。如果您使用的是premium,它至少是10GB,可能要多得多
但如果空间不足,您可以将数据存储在网络驱动器上。按如下方式获取目录:
string tmpFileName = Path.GetTempFileName();
string remoteTempDirectory = Environment.ExpandEnvironmentVariables(@$"%HOME%/render/{DateTime.Today:yyyy-MM-dd}-{Guid.NewGuid()}");
函数完成后,请记住删除目录。网络驱动器的速度大约是本地磁盘的5-10倍
此功能将测试您可以在本地驱动器上存储多少数据:
using System.Net;
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
public static IActionResult Run(HttpRequest req, ILogger logger)
{
Stopwatch stopwatch = Stopwatch.StartNew();
string tmpFileName = Path.GetTempFileName();
logger.LogInformation($"Testing maximum file size with {tmpFileName }");
string bestSize = "?";
byte[] data = new byte[50 * 1024 * 1024];
for (int fiftyMegs = 1; fiftyMegs <= 10; fiftyMegs++)
{
try
{
logger.LogInformation($"Saving file with size { fiftyMegs * 50 } MB...");
using FileStream file = new FileStream(tmpFileName, FileMode.OpenOrCreate);
file.Position = file.Length;
file.Write(data);
bestSize = $"Saving file with size { fiftyMegs * 50 } MB succeded.";
logger.LogInformation($"Saving file with size { fiftyMegs * 50 } MB succeded.");
}
catch (Exception ex)
{
bestSize += Environment.NewLine + $"Saving file with size { fiftyMegs * 50 } MB failed: {ex.Message}";
logger.LogError($"Saving file with size { fiftyMegs * 50 } MB failed: {ex.Message}");
break;
}
}
File.Delete(tmpFileName);
logger.LogInformation($"Saving file test completed.");
bestSize += Environment.NewLine + stopwatch.Elapsed.ToString();
return new OkObjectResult(bestSize);
}
使用System.Net;
使用系统诊断;
使用Microsoft.AspNetCore.Mvc;
使用Microsoft.Extensions.Primitives;
公共静态IActionResult运行(HttpRequest请求,ILogger记录器)
{
秒表秒表=Stopwatch.StartNew();
字符串tmpFileName=Path.GetTempFileName();
logger.LogInformation($“使用{tmpFileName}测试最大文件大小”);
字符串bestSize=“?”;
字节[]数据=新字节[50*1024*1024];
对于(int-fiftyMegs=1;fiftyMegs)