I’m working on my first ASP.NET MVC 3 application and one thing I need to do is handle some data that is exported from someone else’s system and turn around and import it, on user action, into the system and perform some error checking, etc. on it.
Here’s how I have attempted to solve this issue:
I’ve got a view with a div:
<div>
<span><b>Recipe Data:</b>
<input type="file" name="uploadFile" />
<input type="submit" value="Load" />
</span>
</div>
and that allows me to choose a file and then submit it. Then I’ve got a controller action that looks like this:
[HttpPost]
public ActionResult Index(HttpPostedFileBase uploadFile)
{
try
{
// attempt to read the file
}
catch (Exception)
{
throw;
}
}
So, when I’m using IE, I can examine the uploadFile parameter and it gives me a path like:
FileName:c:\\Users\\Matt\\Desktop\\TestFiles\\AppleBerry.xml
(which is exactly the full path to the file I picked)
But when I try the same thing in FireFox, that path is stripped off, so uploadFile.FileName is just AppleBerry.xml and the XDocument.Load tries to load it from:
C:\Program Files (x86)\Common files\Microsoft Shared\DevServer\10.0\AppleBerry.xml
So, I’m pretty sure that I’m going about this the wrong way and need some guidance. I need to read in that XML file, preferably via XDocument.Load() and then do some checks and eventually push the records in that XML file into a DB table. The only part I’m having issues with is this file path.
Try loading the file directly from the request stream and don’t rely on the
FileNameproperty because you haven’t saved the file on the server yet so it won’t find it: