2013-07-24 2 views
2

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

foreach (string s in Request.Files) 
      { 
       HttpPostedFile file = Request.Files[s]; 
       string fileName = file.FileName; 
       string filePath = Path.GetFullPath(fileName); 
       string fileExtension = ""; 

       if (!string.IsNullOrEmpty(fileName)) 
        fileExtension = Path.GetExtension(fileName); 

       .... 
      } 
+1

Что вам подавляет 'file.FileName'? –

+0

@AlaaMasoud Я хочу сохранить копию пути к файлу, который загружается. Можно ли изменить загрузку для использования fileStream и таким образом это будет возможно? – Masriyah

+0

@DimitarDimitrov 'file.FileName' дает мне' docName.doc', но я хочу 'c: \ temp \ files \ docName.doc' – Masriyah

ответ

2

Как указано в комментарии PKKG, это невозможно из-за ограничений безопасности браузерами. Они будут сообщать вам только имя загруженного файла, а не путь к нему.

Также, например, Google Chrome предоставит вам фальшивый путь при попытке захватить его с помощью javascript: C:\fakepath\TestFile.xml.

EDIT: Теперь, когда у меня есть IE под рукой, я даже понял, что это будет дать вам полный правильный путь с помощью JavaScript, если вы захватить выбранное значение, например, через document.forms.file.value.

Это плохое поведение ИМО, на которое нельзя положиться. Браузеры должны скрывать эти конфиденциальные данные, и вам, вероятно, будет лучше не пытаться взломать какое-то решение, которое может работать некоторое время, но оно небезопасно среди разных браузеров или даже версий. Возможно, лучший вопрос: что вы пытаетесь сделать с полным путем клиента? Там может быть другой подход без необходимости пути клиента.

+0

можно обрабатывать файлы по-разному, чтобы я мог получить путь? FileStream? – Masriyah

+0

@ loop852 см. Мое редактирование. нижняя строка: могут быть некоторые обходные пути для некоторых версий некоторых браузеров. Но поскольку браузеры не должны указывать путь клиента, вы не должны пытаться «бить» ограничения безопасности браузера, так как это может очень просто сломать ваш код для будущих версий. –

+0

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

1

Я использую это и действительно идеально:

public ActionResult SaveAvatar(IEnumerable<HttpPostedFileBase> files) 
{ 
    if (files != null) 
    { 
     foreach (var file in files) 
     { 
      var FileName = Path.GetFileName(file.FileName); 
      string extension = Path.GetExtension(FileName).ToUpper(); 
      // do save operation 
     } 
    } 

    // Return an empty string to signify success 
    return Content(""); 
} 

Примечание: Рассмотрим риск безопасности при загрузке.

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