How can I get uploaded file full path in C# 3.0?

2019-01-29 11:24发布

问题:

In my ASP.NET MVC website, I have to read a txt file with some names and emails separeted by ';'. After that, I have to save each line of this txt file to database.

Googling around, I've found some snippets, but in all of them I have to use the txt file path.

But, how can I get this path? This file could be anywhere in a user's machine!

Thanks!!

回答1:

You cannot get the full path of an uploaded file. This would be a privacy violation for the user that uploaded the file.

Instead, you'll need to read the Request.Files that have been uploaded. For example:

HttpPostedFile file = Request.Files[0];
using (StreamReader reader = new StreamReader(file.InputStream))
{
    while ((string line = reader.ReadLine()) != null) 
    {
        string[] addresses = line.Split(';');
        // Do stuff with the addresses
    }
}


回答2:

If you are on a asp.net web page model then Server.MapPath("~/") works to get the root of the site so pass the path you need. You might need to call

HttpContext.Current.Server.MapPath("~/");

For instance a folder where the text files are saved:

string directoryOfTexts = HttpContext.Current.Server.MapPath("~/txtdata/");

To just read from it once you have it you can StreamReader it:

string directoryOfTexts = HttpContext.Current.Server.MapPath("~/txtdata/");
string path = directoryOfTexts + "myfile.txt";
string alltextinfile = "";
if (File.Exists(path)) 
{
    using (StreamReader sr = new StreamReader(path)) 
    {
       //This allows you to do one Read operation.
       alltextinfile = sr.ReadToEnd());
    }
}

If this is for a desktop application then the Applcation class has all this information:

http://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath.aspx

Application.StartupPath

All properties list other appdata folders and stuff but once you have the application path to the executable this gives you context such as Application.LocalUserAppDataPath.

http://msdn.microsoft.com/en-us/library/system.windows.forms.application_properties.aspx

If the content is small enough you could also just save them in a HashTable or a Generic List<String> before saving to the database as well.



回答3:

var hpf = Request.Files[file] as HttpPostedFile; 

the form in the HTML should have enctype="mulitipart/form-data"