Получить полный путь к файлу с помощью FileUpload Control

Я работаю над веб-приложением, которое использует элемент управления FileUpload. У меня есть файл xls в полном пути к файлу «C: \ Mailid.xls». что я пытаюсь загрузить.

Когда я использую команду

FileUpload1.PostedFile.FileName 

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

Я также попробовал следующие команды безуспешно:

   System.IO.Path.GetFullPath(FileUpload1.PostedFile.FileName);
   Path.GetFileName(FileUpload1.PostedFile.FileName);
   System.IO.Path.GetDirectoryName(FileUpload1.PostedFile.FileName).ToString();
   Convert.ToString(System.IO.Directory.GetParent(FileUpload1.PostedFile.FileName));

Как я могу получить полный путь?

 Nifle15 июл. 2009 г., 12:26
Вам необходимо предоставить больше информации (отредактируйте свой пост). Язык, платформа, каково ваше сообщение об ошибке. И, пожалуйста, отформатируйте свой код, используя кнопку кода редактора.
 Strae15 июл. 2009 г., 12:22
На каком языке ты работаешь? Что именно нужно делать и как? Я не понял вопроса.

Ответы на вопрос(18)

Начиная с IE8, полный путь больше не отправляется на сайты в зоне Интернета.

См. «Управление загрузкой файлов». раздел в конце этого поста:http://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx для обсуждения.

FileUpload никогда не даст вам полный путь из соображений безопасности.

 Dhanraj15 июл. 2009 г., 12:42
привет спасибо за ответ Но эта команда показывает полный путь в другой системе. как это возможно.
 15 июл. 2009 г., 13:53
Используя fileUpload, вы не можете получить полный путь клиентского компьютера к файлу. Ни за что. FileUpload может обрабатывать загрузку файла, и вам не нужно беспокоиться о пути. Возможно, вы получили полный путь к файлу другими способами (например, System.IO.Path или MapPath или что-то еще). Но я сомневаюсь, что вы использовали FileUpload, чтобы получить полный путь.

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

string filename = Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(),".xls"));
                File.WriteAllBytes(filename, FileUploadControl.FileBytes);
 26 сент. 2013 г., 19:38
Попробуйте добавить объяснение, чтобы согласиться с примером кода

У меня была какая-то противоположная проблема с оригинальным постером: я получал полный путь, когда хотел только имя файла. Я использовал решение Gabri's, чтобы получить только имя файла, но в процессе я обнаружил, почему вы получаете полный путь на некоторых машинах, а не на других.

Любой компьютер, подключенный к домену, вернет вам полный путь к имени файла. Я пробовал это на нескольких разных компьютерах с постоянными результатами. У меня нет объяснения, почему, но, по крайней мере, в моем тестировании оно было последовательным.

Проверьте этот пост под FileUpload Control

Кроме того, & # x201C; Включить путь к локальному каталогу при загрузке файлов & # x201D; Для URLAction установлено значение «Отключить». для интернет-зоны. Это изменение предотвращает утечку потенциально важной информации локальной файловой системы в Интернет. Например, вместо того, чтобы указывать полный путь C: \ users \ ericlaw \ documents \ secret \ image.png, Internet Explorer 8 теперь будет отправлять только имя файла image.png.

Это опция в интернет-безопасности, которая может быть включена

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

 Dhanraj15 июл. 2009 г., 13:16
Я занимаюсь разработкой веб-приложения. Я использую контроль загрузки файлов для просмотра файлов. Он работал нормально. Сегодня я установил IE 8 После установки я не смог получить полный путь к файлу, в чем может быть проблема Событие Я удалил IE 8. В настоящее время я использую IE 7.

Я использую IE 8 (на двух разных машинах). Каждый по-прежнему загружает полный локальный путь к файлу. Как предполагает Gabri & lt; l, Path.GetFileName (fileUploadControl.PostedFile.FileName), по-видимому, является единственным способом обеспечить получение только имени файла.

IE 7 и предыдущие версии отправляли полный путь к загруженному файлу на сервер, связанный сinput type="file" поле. Firefox и другие современные браузеры считают это недостатком безопасности и не делают этого. Тем не менее, это, кажется, было исправлено в IE 8.

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

Path.GetFullPath(fileUpload.PostedFile.FileName);

Извините, вы получите каталог программных файлов + имя вашего файла.

dim path as string = FileUpload1.PostedFile.FileName

Кстати, я использую Visual Studio 2010. Я не знаю, есть ли разница с другой версией.

Решение Вопроса

Пытаться

Server.MapPath(FileUpload1.FileName);

Edit:  Этот ответ описывает, как получить путь к файлу на сервере. Он не описывает, как получить путь к файлу на клиенте, что и было задано вопросом. Ответ на этот вопрос - «Вы не можете», потому что современный браузер не будет указывать вам путь к клиенту по соображениям безопасности.

 06 сент. 2011 г., 20:20
Это не сработает. Если предположить, что корнем приложения является C: \ MySource \ MyProject \, то Server.MapPath (& quot; Mailid.xls & quot;) выдаст вам C: \ MySource \ MyProject \ Mailid.xls вместо C: \ Mailid.xls, как было сказано в вопросе. необходимо.
 18 апр. 2014 г., 10:52
Это неправильный ответ, почему он голосует против
 03 янв. 2013 г., 09:29
Почему это помечено как правильный ответ и имеет 6 голосов?
 17 янв. 2013 г., 19:02
Извините, это на самом деле не решает исходную проблему.
 05 дек. 2013 г., 18:03
Это неправильный ответ. Server.MapPath () возвращает путь к виртуальному каталогу приложения.

Проверь это:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="FileUp.aspx.vb" Inherits="FileUp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server"></asp:Label><br />
       <asp:FileUpload ID="FileUpload1" runat="server" /><br />
        <asp:Button ID="Button1" runat="server" Text="Upload" />
    </div>
    </form>
</body>
</html>

Код:

Partial Class FileUp
    Inherits System.Web.UI.Page
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim path As String
        Dim path1 As String
        path = Server.MapPath("~/")
        FileUpload1.SaveAs(path + FileUpload1.FileName)
        path1 = path + FileUpload1.FileName
        Label1.Text = path1
        Response.Write("File Uploaded successfully")
    End Sub
End Class

Просто чтобы дать мне 2 цента.

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

Это конечный пользователь нашего приложения, которое размещено на стороннем сервере. Таким образом, он не находится ни на локальном компьютере, ни на локальном сервере, с которого он может быть общим.

Вы можете решить проблему, по крайней мере, чтобы все время иметь одно и то же поведение:

Path.GetFileName(fileUpload.FileName)

Кстати, только что нашел эту статью, в которой говорится, что это тоже может произойти:http://www.eggheadcafe.com/community/aspnet/17/10092650/fileupload-control-pro.aspx

Просто чтобы подтвердить проблему.

Возможно, вы неправильно понимаете путьFileUpload работает.

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

Знание полного пути к файлу на клиентском компьютере обычно не требуется - вам часто нужно что-то делать с содержимым файла. Ваши примеры похожи на ASP.NET C #, поэтому я предполагаю, что вы используете элемент управления FileUpload. Вы можете получить содержимое загруженного файла, прочитав необработанный поток (FileUpload.PostedFile.InputStream) или сначала сохранив файл (FileUpload.PostedFile.SaveAs), затем доступ к сохраненному файлу. Вы несете ответственность за сохранение файла, если хотите, чтобы он был доступен после текущего запроса - если вы этого не делаете, ASP.NET удаляет его.

Еще одна вещь - не забудьте установитьenctype укажите в своей форме значение "multipart / form-data". Если вы этого не сделаете, браузер клиента не отправит файл, и вы потратите немало минут, пытаясь понять, что пошло не так.

 04 нояб. 2012 г., 00:18
это сработало для меня:FileUpload.PostedFile.FileName спасибо elo80ka
 20 июн. 2018 г., 12:04
Вот как работает элемент управления .. это должно быть помечено как правильный ответ.
 Dhanraj15 июл. 2009 г., 13:07
Я занимаюсь разработкой веб-приложения. Я использую контроль загрузки файлов для просмотра файлов. Он работал нормально. Сегодня я установил IE 8 После установки я не смог получить полный путь к файлу, в чем может быть проблема Событие Я удалил IE 8. В настоящее время я использую IE 7.
 03 мая 2014 г., 00:52
Это было это. Забыли основные функциональные возможности этого элемента управления.

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

По умолчанию отключено. Просто включите это.

Это не будет проблемой, если мы используем браузер IE. Это для других браузеров, сохраните файл в другом месте и используйте этот путь.

if (FileUpload1.HasFile)

{

строка fileName = FileUpload1.PostedFile.FileName;

строка TempfileLocation = @ & quot; D: \ uploadfiles \ & quot ;;

string FullPath = System.IO.Path.Combine (TempfileLocation, fileName);

FileUpload1.SaveAs (FullPath);

Response.Write (FullPath);

}

Спасибо

Это & APOS; scurrently истина в том, что "при загрузке файла браузер будет отправлять только имя исходного файла, а не полный путь". - вполне логично, что серверу не нужно знать, находился ли файл в & quot; C: \ WINDOWS \ & quot; или & quot; F: \ SOMEDIR \ OTHERDIR \ PERSONALINFO \ & quot ;. Файлname всегда отправляется и полезен как для того, чтобы помочь пользователю «распознать»; содержание и, возможно, опросить расширение файла, чтобы помочь определить тип файла.

Однако я знаю по своему опыту, что Internet Explorer определенноused to (в более старых версиях) отправить весь путь. Трудно найти авторитетное подтверждение (кроме этогоapache fileupload control doco)

Internet Explorer provides the entire path to the uploaded file and not just the base file name

В любом случае, вы не должны использовать или ожидать, что полный путь будет отправлен каким-либо «современным» пользователем. браузер.

 14 июн. 2017 г., 15:48
спасибо @conceptdev за информацию о IE!
 17 мая 2011 г., 16:01
В Internet Explorer 8 исправлено предоставление только имени файла в зоне Интернета, но в зоне локальной интрасети он по-прежнему отправляет полный путь. +1 к @ воскресенье Ironfoot для предложения Path.GetFileName.
 12 мар. 2010 г., 11:46
Я также добавил бы, что вы никогда не должны предполагать, что свойство .FileName будет содержать только имя файла и ничего больше. Иногда он может содержать полностью квантифицированный путь, чаще всего только имя файла. Это зависит от того, сколько лет клиентскому браузеру. В любом случае вы должны ВСЕГДА оборачивать Path.GetFileName (fileUpload.FileName), чтобы гарантировать, что это определенно имя файла, с которым вы имеете дело, а НЕ путь. (Утилита Path находится в пространстве имен System.IO).
Convert.ToString(FileUpload1.PostedFile.FileName);

Ваш ответ на вопрос