File.Exists из UNC с использованием службы хранилища / общего доступа к файлам Azure через IIS приводит к ложному результату.

Проблема: попытка получить изображение из файлового хранилища Azure для манипуляций. Мне нужно прочитать файл как Drawing.Image для манипуляций. Я не могу создать действительный объект FileInfo или изображение с помощью uncpath (что мне нужно сделать для использования через IIS)

Текущая настройка: прикрепите виртуальный каталог под названием Photos на веб-сайте IIS, указывающий на UNCPath общего файлового ресурса Azure (например, \ myshare.file.core.windows.net \ sharename \ pathtoimages). Это работает как http://example.com/photos/img.jpg, поэтому я знаю, что это не проблема с разрешениями или аутентификацией.

По какой-то причине я не могу получить ссылку на File.

var imgpath = Path.Combine(Server.MapPath("~/Photos"),"img.jpg") \\resolves as \\myshare.file.core.windows.net\sharename\pathtoimages\img.jpg var fi = new FileInto(imgpath); if(fi.exists) //this returns false 100% of the time var img = System.Drawing.Image.FromFile(fi.FullName);

Проблема в том, что файл никогда не обнаруживается, хотя я не могу взять этот путь, поместить его в окно проводника и вернуть img.jpg в 100% случаев.

Кто-нибудь знает, почему это не работает? Нужно ли мне использовать объект CloudFileShare, чтобы просто прочитать файл, который, как я знаю, существует?


person macm    schedule 04.04.2018    source источник
comment
Пару моментов. Используете ли вы олицетворение пользователя в своем веб-приложении? Также попробуйте прочитать файл хоть пару байт. Иногда fileinfo.exists ведет себя странно. У вас есть исключение?   -  person Fabrizio Accatino    schedule 05.04.2018
comment
Попытка File.ReadAllBytes привела меня к другой ошибке: имя пользователя / пароль не прошел проверку подлинности, что действительно было проблемой. Это имеет смысл, поскольку server.mappath теперь использует UNC, который на самом деле не имеет ничего общего с виртуальным каталогом. Это привело меня к проблеме других парней, и решение здесь принесло радость. stackoverflow .com / questions / 582988 / Спасибо за предложение, Фабрицио.   -  person macm    schedule 05.04.2018


Ответы (1)


Оказывается, проблема в том, что мне нужно было обернуть мой код олицетворением идентификатора пользователя общего файлового ресурса azure, поскольку виртуальный каталог на данный момент вообще не задействован.

using (new impersonation("UserName","azure","azure pass"))
{
//my IO.File code
}

Я использовал этот скрипт олицетворения парней, найденный здесь. Можете ли вы объяснить, почему DirectoryInfo.GetFiles создает это исключение ввода-вывода?

person macm    schedule 05.04.2018