C # Получить полный путь к файлу - PullRequest
3 голосов
/ 26 августа 2010

У меня есть элемент управления ASP FileUpload, и я загружаю:

C:\Documents and Settings\abpa\Desktop\TTPublisher\apache-tomcat-6.0.26\webapps\ttpub\WEB-INF\classes\org\gtfs\tmp\GTFS_Rail\routes.txt

Что такое код C # для захвата всей этой строки, используя код ниже:

var pathOfCsvFile = Server.MapPath(ImportRoutes.FileName);
var adapter = new GenericParsing.GenericParserAdapter(pathOfCsvFile);
DataTable data = adapter.GetDataTable();

Я знаю, чтоServer.MapPath нужно изменить.

ОБНОВЛЕНИЕ:

Использование System.IO.Path.GetFullPath дало мне следующий вывод:

pathOfCsvFile = "C:\\Program Files\\Common Files\\Microsoft Shared\\DevServer\\10.0\\routes.txt"

Ответы [ 2 ]

7 голосов
/ 26 августа 2010

Вы смешиваете поведение клиента и сервера, что легко сделать при локальном тестировании. Проблема, с которой вы столкнулись, заключается в том, что FileUploadControl (и загрузка файла HTML в целом) специально разработан для , а не , чтобы предоставить вам полный путь к файлу. Это было бы нарушением конфиденциальности. предназначен для того, чтобы дать вам двоичные данные файла, который был загружен сам. В частности, вы должны запросить свойства FileUploadControl: FileBytes или FileContent.

Просто чтобы прояснить проблему, что бы произошло, если бы пользователь браузера фактически находился на физически отличной машине от веб-сервера (обычный случай)? Какая польза от полного пути файла на клиентском компьютере на сервере ?

0 голосов
/ 26 августа 2010

Server.MapPath вернет физический путь к файлу внутри или ниже корня приложения. Если указанный вами путь находится за пределами корня приложения, Server.MapPath не будет работать.

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

...