2009-08-19 2 views
1

Я загружаю файл с помощью простого элемента управления FileUpload с именем theFile (ASP.NET). Я пытаюсь получить абсолютный путь к файлу, но thefile.PostedFile.FileName и thefile.FileName - это то же самое, просто имя файла, нет пути! Я не могу использовать Server.MapPath, потому что я буду сохранять этот файл на другом сервере (перенося через байтовый массив через webservice).Получить абсолютный путь к файлу, который будет загружен

Он разбивает на этой линии:

Dim fStream As New FileStream(thefile.FileName, FileMode.Open, FileAccess.Read) 

, потому что он принимает имя файла и отображение его в относительный путь мой VS! Мне нужен абсолютный путь ...

+0

Какую версию .net-структуры вы используете? – adatapost

+0

В основном, я хочу знать, что путь файла заключается в том, что пользователь пытается загрузить, поэтому я могу взять его и создать из него выходной поток. – Jason

+0

HTML-форма с enctype = multipart/form-data и post method для загрузки содержимого файла (а не файла). – adatapost

ответ

5

Файл, загруженный через HTTP, никогда не будет содержать полный путь на удаленной (клиентской) машине - он может отдать информацию о своей структуре каталогов, и поэтому считается угрозой безопасности. Плюс, какое это было бы? Если кто-то загружает вам файл из Интернета, почему вы пытаетесь открыть поток на локальном сервере (asp.net server) на пути, который существовал на их машине?

Загруженные файлы фактически проходят через поток байтов как часть запроса. Чтобы получить файл, вам необходимо получить доступ к свойству FileBytes элемента управления или вызвать метод SaveAs(), чтобы сохранить его на сервере. В вашем случае вы могли бы просто получить байты и отправить их на вызов webservice, который вам нужно сделать.

+0

Как создать поток, не зная путь к файлу, который я пытаюсь получить? – Jason

+0

Я думаю, вы немного смущены. Загруженный файл существует как поток байтов как часть HTTP-запроса. Между этим потоком байтов и файлом файловой системы нет никакой связи, пока вы не сохраните его на диск. – womp

+0

@ Джейсон: Как сказал Хади, используйте свойство FileContent для использования основного потока загруженного файла. – shahkalpesh

1

(передача через байтовый массив через веб-сервис).

Поскольку вам в настоящее время требуется массив байтов файлов, почему бы не получить доступ к байт-массиву файла через свойствоFile.FileBytes?

Вот ссылка на свойства FileBytes веб-управления FileUpload: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.filebytes.aspx

Если вы хотите получить доступ к объекту поток напрямую, вы можете использовать свойство FileContent. Вот ссылка на свойство FileContent веб-элемента управления FileUpload: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.filecontent.aspx