2013-05-30 135 views
2

當我使用HttpPostedFileBase.SaveAs(path)時,我想將上傳的文件保存在項目目錄之外,文件目標將位於服務器的目錄中。更改HttpPostedFileBase.SaveAs目標目錄

例如: HttpPostedFileBase fileurl = null;

foreach (string file in Request.Files) 
    { 
     fileurl = Request.Files[file]; 

    } 
    string extension = Path.GetExtension(fileurl.FileName); 
    if (extension == ".zip" || extension == ".rar") 
    { 
     if (fileurl != null && fileurl.ContentLength > 0) 
     { 
     var fileName = Path.GetFileName(fileurl.FileName); 
     var path = AppDomain.CurrentDomain.BaseDirectory + fileName; 
      fileurl.SaveAs(path); 

path始終在項目的目錄中。

我想保存我上傳的目錄到處都是我想要的。我怎樣才能改變代碼來做到這一點?

回答

1

你將其設置爲服務器的目錄,當你寫:

 var path = AppDomain.CurrentDomain.BaseDirectory + fileName; 

AppDomain.CurrentDomain.BaseDirectory 

指向當前域的目錄的使用。

+0

即使我保存爲沒有'AppDomain.CurrentDomain.BaseDirectory'同樣的問題仍然存在例如路徑=「C:/項目」結果路徑是「我的項目的路徑/路徑」 – chaker

+0

你是100%肯定你的路徑'發送到'SaveAs'是一個完整的路徑(以驅動器號開頭)到你想要保存的位置? –

0

我會用這樣的東西。

foreach (string file in Request.Files) 
{ 
    var fileurl = Request.Files[file] as System.Web.HttpPostedFileBase; 
    var stream = System.IO.File.Create("PATH_TO_DIRECTORY"); 
    fileurl.InputStream.Seek(0, SeekOrigin.Begin); 
    fileurl.InputStream.CopyTo(stream); 
    stream.Close(); 
} 

如果你想寫以外的AppDomain目錄。

但是網站的身份必須具有對該目錄路徑的寫訪問權限,否則您將收到寫入錯誤。

1

我利用:

var path = Path.Combine(Server.MapPath(), filename); 
file.SaveAs(path); 

有一個關於使用Server.Mappath很好的解釋後()在這疊後:Server.MapPath() Explained

從引用的文章(highly recommend reading the full post)短報價:

  • Server.MapPath指定相對或虛擬al路徑映射到 物理目錄。
  • 使用Server.Mappath(」。 「)返回 文件的當前物理目錄(例如C++)正在執行
  • 使用Server.Mappath(」 .. 「)返回父目錄
  • 使用Server.Mappath(」 〜「)將物理路徑返回到 應用程序根目錄的根目錄
  • Server.MapPath(」/「)返回到域名根目錄的物理路徑(不一定與 應用程序的根目錄相同)