2009-03-06 2 views
0

Элемент управления FileUpload требует, чтобы я предоставил корневой каталог в методе SaveAs(). Тем не менее, я бы предпочел, чтобы загруженные файлы вошли в виртуальный каталог, например «~/UserFiles/[имя_пользователя]/[имя_файла]». Есть ли способ сделать это?FileUploads и корневые каталоги

+0

Будьте в курсе того, что вы делаете, когда загрузка идет непосредственно в папку, которая доступна на веб-сервере. Похоже, вы открываете серьезную уязвимость. –

ответ

4

Используйте страницы MapPath метод: -

ctl.SaveAs(MapPath("~/UserFiles/[username]/[filename]")); 
+0

Спасибо. Теперь все имеет смысл. –

+0

ummm. , , есть ли способ создать «~/userdata/[имя пользователя]», если он еще не существует? –

+0

System.IO.Directory.CreateDirectory (MapPath ("~/userdata/[имя пользователя]")); – AnthonyWJones

0

Нет, требуется ключевое слово. Вы можете использовать свой скрипт для копирования файла после загрузки.

+0

Хммм. Знаете ли вы, какое обоснование требуется для корневого каталога для этого элемента управления? Мне кажется сумасшедшим. –

+0

Рационально то, что это физический путь к файлу с момента сохранения в файловой системе. Пути в URL-адресах являются логическими путями, а не физическими. Вполне вероятно, что многие приложения будут сохранять файл где-то за пределами папок, представляющих веб-сайт. – AnthonyWJones

+0

Да. Но в моем случае пользователи не имеют контроля над тем, где файл сохраняется. Только моя программа. –

0

Иногда MapPath не является прямым доступом.

В этом случае используйте

ctl.SaveAs(Server.MapPath("~/UserFiles/[username]/[filename]")); 
+0

есть ли способ создать «~/userdata/[username]», если он еще не существует? –

Смежные вопросы