Я успешно загружаю файл с помощью элемента управления AjaxFileUpload из AjaxToolkit. Мне пришлось дать IUSR
права на запись в папку, но после этого проблем не было.
Однако загруженные файлы не наследуют разрешения, установленные для папки, поэтому для них нет IUSR
в списке. На моем локальном компьютере это не представляет особой проблемы, но на сервере это означает, что возвращается 401, поскольку для чтения файла требуется разрешение IUSR на чтение.
Из того, что я вижу, папка настроена на применение разрешений к файлам внутри, что наводит меня на мысль, что это как-то связано с тем, как файл сохраняется в папке. Кто-нибудь знает что-нибудь еще об этом?
ОБНОВЛЕНИЕ
Итак, я нашел дополнительную информацию о проблеме. В этой статье предлагается, чтобы перед сохранением файла в указанном месте он сначала хранился во временном месте. Обходной путь, который они предлагают (изменение временного местоположения на известное и установка разрешений для него), похоже, не работает для AjaxFileUpload. Остальные временные файлы проекта отображаются там, но с помощью Process Monitor я вижу, что мое временное местоположение для загруженных изображений находится совсем в другом месте:
Если я установлю разрешения на эту папку для IUSR
, моя проблема будет исправлена. Итак, следующий вопрос, всегда ли будет существовать это место? Я предполагаю, что нет. Если да, то как я могу изменить его?
ОБНОВЛЕНИЕ 2
ОК, поэтому я обнаружил, что в элементе управления есть несколько статических методов, которые настроены на создание временного каталога:
public static string BuildTempFolder(string fileId)
{
return Path.Combine(AjaxFileUpload.BuildRootTempFolder(), fileId);
}
public static string BuildRootTempFolder()
{
string path = Path.Combine(Path.GetTempPath(), "_AjaxFileUpload");
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
return path;
}
Одна из ключевых строк, вероятно, такова: string path = Path.Combine(Path.GetTempPath(), "_AjaxFileUpload");
, которая, похоже, совпадает с тем, что я нашел в своем мониторе процессов. Кажется, что без пересборки проекта я застрял с их настройками по умолчанию, поэтому я могу поискать другой инструмент в другом месте.