无法在 Azure Functions 中创建文件

Sol*_*per 6 azure azure-app-service-plans azure-functions

我有一个在应用服务计划上运行的 Azure 功能。此函数应用程序从 sftp 下载文件并执行一些处理/验证,然后上传到 blob 存储。

这是工作代码,我必须进行一些更改,以便我必须保存物理文件 FileStream 而不是 MemoryStream。这在我的本地环境中也有效,但一旦部署到 Azure,我在下载 sftp 文件的步骤中收到 FileNotFound 错误。

错误文本(编辑的文件/类名称)

System.IO.FileNotFoundException: Could not find file 'D:\home\site\wwwroot\myfile.csv'.
File name: 'D:\home\site\wwwroot\myfile.csv'
   at System.IO.FileStream.ValidateFileHandle(SafeFileHandle fileHandle)
   at System.IO.FileStream.CreateFileOpenHandle(FileMode mode, FileShare share, FileOptions options)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
   at MyProcessDataLoadProcess.DownLoadMyProcessFilesFromSftp.DownloadFileFromSftp(SftpClient sftp, SftpFile sftpFile, String localRootPath) in D:\a\1\s\MyProcessDataLoadProcess\DownLoadMyProcessFilesFromSftp.cs:line 173
   at MyProcessDataLoadProcess.DownLoadMyProcessFilesFromSftp.Run(TimerInfo timerInfo, ILogger log, ExecutionContext context) in D:\a\1\s\MyProcessDataLoadProcess\DownLoadMyProcessFilesFromSftp.cs:line 106
Run Code Online (Sandbox Code Playgroud)

我确信这与权限有关,因为当我尝试使用简单的 dir 创建测试文件时> 来自平台功能命令行工具的 test.txt,我收到“系统找不到指定文件的错误”。 在此输入图像描述

我确信这与允许写入本地磁盘的设置有关,因为我使用不同的订阅进行了 POC,其中我拥有完全权限。我不确定这是否可以在应用程序设置中的某个位置进行配置,或者是否需要授予存储级别或订阅级别权限的权限。

更新:

目前,我找到了通过使用 Path.GetTempPath() 来使用临时文件夹的解决方法。但是,我有点困惑是什么限制阻止我在根文件夹中创建文件。

小智 7

WEBSITE_RUN_FROM_PACKAGE应用程序设置值为 1 时,zip 部署 API 会将包复制到 d:\home\data\SitePackages 文件夹,而不是将文件解压到 d:\home\site\wwwroot。它还创建 packagename.txt 文件。重新启动后,该包将作为只读文件系统安装到 wwwroot。Run From Package 使 wwwroot 变为只读,因此将文件写入此目录时会收到错误消息。