При попытке открыть указанный пользователем файл и обработать его путь потерян - PullRequest
0 голосов
/ 20 августа 2011

Итак, я работаю над своим первым приложением ASP.NET MVC 3, и мне нужно лишь обработать некоторые данные, экспортированные из чужой системы, а затем развернуть и импортировать их по действию пользователя в систему. и выполнить на нем некоторую проверку ошибок и т. д.

Вот как я пытался решить эту проблему:

У меня есть вид с div:

<div>
   <span><b>Recipe Data:</b>
     <input type="file" name="uploadFile" />
     <input type="submit" value="Load" />
   </span>
</div>

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

[HttpPost]
public ActionResult Index(HttpPostedFileBase uploadFile)
{
   try
   {
      // attempt to read the file
   }
   catch (Exception)
   {
      throw;
   }
}

Итак, когда я использую IE, я могу проверить параметр uploadFile, и он дает мне путь, подобный:

FileName: c:\\Users\\Matt\\Desktop\\TestFiles\\AppleBerry.xml

(это точно полный путь к файлу, который я выбрал)

Но когда я пытаюсь сделать то же самое в FireFox, этот путь удаляется, поэтому uploadFile.FileName - это просто AppleBerry.xml и XDocument.Load пытается загрузить его из:

C: \ Program Files (x86) \ Общие файлы \ Microsoft Shared \ DevServer \ 10.0 \ AppleBerry.xml

Итак, я почти уверен, что поступаю неправильно и нуждаюсь в руководстве. Мне нужно прочитать этот XML-файл, предпочтительно через XDocument.Load(), а затем выполнить некоторые проверки и в конечном итоге поместить записи в этом XML-файле в таблицу БД. Единственная часть, с которой у меня проблемы - это путь к файлу. Любая помощь, которую вы можете оказать с этим, будет наиболее ценной.

Ответы [ 2 ]

1 голос
/ 20 августа 2011

Сервер не имеет доступа к файловой системе клиента, поэтому исходный путь не имеет значения.Кроме того, файл не сохраняется в файловой системе сервера, поэтому вы должны загружать его из свойства InputStream, согласно ответу Дарина.

1 голос
/ 20 августа 2011

Попробуйте загрузить файл непосредственно из потока запросов и не полагайтесь на свойство FileName, поскольку вы еще не сохранили файл на сервере, поэтому он не найдет его:

[HttpPost]
public ActionResult Index(HttpPostedFileBase uploadFile)
{
    if (uploadFile != null && uploadFile.ContentLength > 0)
    {
        try
        {
            // attempt to read the file
            var doc = XDocument.Load(uploadFile.InputStream);
            // TODO: do something with the XML document
        }
        catch (Exception)
        {
            // Make sure you do something more meaningful here
            // instead of rethrowing and erasing the stacktrace 
            throw;
        }
    }
    else
    {
        // The user didn't upload any file => take respective actions
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...