2012-07-04 139 views
1

我想实现一个简单的文件上传,但有一些麻烦。当我硬编码的路径工作正常。但由于某些原因,当我尝试使用文件上传,控制器名称被附加到路径文件上传中的路径问题?

硬编码路径(就是我试图让):

@"C:\Users\Scott\Documents\The Business\MasterSpinSite\MasterSpin\MasterSpin\LOADME.txt" 

路径我掌握异常(注意 “appz” 控制器的名称):

C:\Users\Scott\Documents\The Business\MasterSpinSite\MasterSpin\MasterSpin\appz\LOADME.txt' 

我的控制器

public ActionResult Load(spinnerValidation theData, HttpPostedFileBase file) 
    { 

     if (file.ContentLength > 0) 
     { 

      string filePath = Request.MapPath(file.FileName); 

      string input = System.IO.File.ReadAllText(filePath); 
      string[] lines = Regex.Split(input, "#!#"); 
      // ...... do stuff 

     } 

我的看法

<form action="" method="post" enctype="multipart/form-data"> 

    <label for="file">Filename:</label> 
    <input type="file" name="file" id="file" /> 

<input type="submit" value="LOAD ME!"> 

</form> 

什么可能导致此行为?

回答

0

试试这个:

public ActionResult Load(spinnerValidation theData, HttpPostedFileBase file) 

    if (file.ContentLength > 0) 
    { 
     var filePath = System.IO.Path.GetFileName(file.FileName); 
     using (System.IO.StreamReader sr = new System.IO.StreamReader(filePath)) 
     { 
      var input = sr.ReadToEnd(); 
      var lines = Regex.Split(input, "#!#"); 
     } 
    } 
} 

(BUG)System.IO.Path.GetFileName(file.FileName)回报文件的名称

编辑

变化System.IO.Path.GetFileName(file.FileName)Server.MapPath(file.FileName)

public ActionResult Load(spinnerValidation theData, HttpPostedFileBase file) 

    if (file.ContentLength > 0) 
    { 
     var filePath = Server.MapPath(file.FileName); 
     using (System.IO.StreamReader sr = new System.IO.StreamReader(filePath)) 
     { 
      var input = sr.ReadToEnd(); 
      var lines = Regex.Split(input, "#!#"); 
     } 
    } 
} 

编辑II

或复制到diferent路径:

public ActionResult Load(spinnerValidation theData, HttpPostedFileBase file) 

    if (file.ContentLength > 0) 
    { 
     var fileName = System.IO.Path.GetFileName(file.FileName); 
     var fileUpload = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName); 
     file.SaveAs(fileUpload); 
     if (System.IO.File.Exists(fileUpload)) 
     { 
      using (System.IO.StreamReader sr = new System.IO.StreamReader(fileUpload)) 
      { 
       var input = sr.ReadToEnd(); 
       var lines = Regex.Split(input, "#!#"); 
      } 
     } 
    } 
} 
+0

尝试,和它现在给人一种完全不同的路径 - “无法找到文件'C:\ Program Files \ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ LOADME1.txt'。” – loveforfire33

1

您可以保存自己的物流的努力:

string filename = Request.Files["file"].FileName; 
string filePath = Path.Combine(Server.MapPath("~/YourUploadDirectory"), filename); 

HttpPostedFileBase postedFile = Request.Files["file"] as HttpPostedFileBase; 
postedFile.SaveAs(filePath); 

string input = File.ReadAllText(filePath);