Path.GetFullPath задан неверный путь - PullRequest
1 голос
/ 12 декабря 2011

Я выбираю загрузить файл с именем about.png, который находится в папке "C: \ images \ about.png", но когда я перехожу по коду после получения ошибки, файл не найден, я вижу, что он всегда задает путьна это "C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ about.png"

Я загрузил это на свой веб-сервер и получил тот же результат, так что это неместный вопрос.Странно то, что Visual Studio установлен на диске E, а не на диске C, что добавляет еще больше путаницы.Заранее благодарим за любую помощь.

Вот код.

request.FilePath = Path.GetFullPath(filefield.FileName);

Добавлено Примечание. Файл может быть откуда угодно, так как пользователь будет выбирать изображение профиля.Я забыл упомянуть, что это процедура загрузки

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

Содержимое загруженного файла является частью HTTP-запроса - элемент управления загрузкой файлов ASP.NET не сохраняет файл на диске. Вы должны сделать это вручную, используя метод SaveAs .

Свойство FileName предоставляет только имя файла, поскольку информация о пути будет получена от клиентского компьютера и не имеет никакого отношения к серверу сервера. Так что если вы попробуете Path.GetFullPath, чтобы получить полный путь к имени файла - это только относительный путь, который даст путь w.r.t. текущий каталог - в вашем случае это веб-сервер разработки пути (поставляется с Visual Studio).

Как правило, вы должны использовать метод SaveAs для сохранения загружаемого файла в указанном месте на веб-сервере - имя файла, используемое при сохранении, должно быть сгенерированным (скажем, guid или какой-либо другой идентификатор) и сохранять фактический файл имя в базе данных вместе с сгенерированным именем файла. Это связано с тем, что имя загружаемого файла может быть недопустимым на компьютере сервера (подумайте о том, что кто-то загружает файл с компьютера MAC или Linux). Еще один способ - сохранить файл на диске во временной папке и затем поместить содержимое в саму базу данных.

1 голос
/ 12 декабря 2011

Path.GetFullPath(...) возвращает путь к указанному имени файла относительно вашего текущего каталога.

Обычно ваш текущий каталог - это то, откуда запускается приложение, поэтому, если вы работаете с C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\, тогда этовывод правильный.

Что вам может понадобиться, это извлечь имя файла из заданного filefield, используя Path.GetFileName, а затем создать абсолютный путь, куда вы хотите сохранить его, используя Path.GetFullPath.

Документация Path.GetFullPath объясняет это довольно просто:

string fileName = "myfile.ext";
string path1 = @"mydir";
string path2 = @"\mydir";
string fullPath;

fullPath = Path.GetFullPath(path1);
Console.WriteLine("GetFullPath('{0}') returns '{1}'", 
    path1, fullPath);

fullPath = Path.GetFullPath(fileName);
Console.WriteLine("GetFullPath('{0}') returns '{1}'", 
    fileName, fullPath);

fullPath = Path.GetFullPath(path2);
Console.WriteLine("GetFullPath('{0}') returns '{1}'", 
    path2, fullPath);

// Output is based on your current directory, except
// in the last case, where it is based on the root drive
// GetFullPath('mydir') returns 'C:\temp\Demo\mydir'
// GetFullPath('myfile.ext') returns 'C:\temp\Demo\myfile.ext'
// GetFullPath('\mydir') returns 'C:\mydir'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...