Невозможно создать файл в Azure Функции - PullRequest
0 голосов
/ 16 января 2020

У меня есть функция Azure, работающая в плане обслуживания приложения. Это приложение-функция загружает файл из sftp и выполняет некоторый процесс / проверку, а затем загружает в хранилище BLOB-объектов.

Это работающий код, и мне пришлось внести некоторые изменения, чтобы мне пришлось сохранить физический файл FileStream. вместо MemoryStream. Это также работало в моей локальной среде, но после развертывания в Azure я получаю ошибку FileNotFound на этапе загрузки файла sftp.

Текст ошибки (отредактированные имена файлов / классов)

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

Я уверен, что это как-то связано с разрешениями, потому что когда я пытался создать тестовый файл, используя простой dir . > test.txt из инструмента командной строки функций платформы, я получаю msgstr "система не может найти ошибку в файле". enter image description here

Я уверен, что это должно что-то делать с настройками, которые позволят записывать на локальный диск c, потому что я сделал PO C, используя другую подписку, где у меня есть полные разрешения. Я не уверен, что это можно настроить где-то в настройках приложения или нужно предоставить разрешения на уровне хранилища или на уровне подписки.

Обновление:

На данный момент я нашел обходной путь для использования временной папки с помощью Path.GetTempPath (). Тем не менее, я немного озадачен тем, что это ограничение мешает мне создать файл в папке root.

1 Ответ

0 голосов
/ 17 января 2020

Если для параметра приложения WEBSITE_RUN_FROM_PACKAGE установлено значение 1, API развертывания zip копируют пакет в папку d: \ home \ data \ SitePackages вместо того, чтобы извлекать файлы в папку d: \ home \ site \ wwwroot. создает файл packagename.txt. После перезапуска пакет монтируется в wwwroot как файловая система только для чтения. Запуск из пакета делает wwwroot доступным только для чтения, поэтому вы получите сообщение об ошибке при записи файлов в этот каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...