2016-02-13 53 views
1

我有一個令人困惑的問題。我正在嘗試使用FileUpload。下面的代碼工作以及本地:FileUpload不讓我保存

var postedFile = uploader.PostedFile; 
    var fileName = Path.GetFileName(postedFile.FileName); 
    var extension = Path.GetExtension(fileName); 
    var newFile = Guid.NewGuid() + extension; 
    var imageFilePath = Path.Combine(this.Server.MapPath("~/ProductImages"), newFile); 
    uploader.SaveAs(imageFilePath); 

但是,當我在網上公佈我的代碼到我的服務器,將出現以下異常:

找不到路徑的一部分[...]

當我改變uploader.SaveAs(imageFilePath);uploader.SaveAs(imageFilePath.Replace(this.Request.ServerVariables["APPL_PHYSICAL_PATH"], "..\\"));,出現此異常:

SaveAs方法配置爲需要一個根路徑,並且路徑[..]未生根。

有沒有人告訴我如何使用上傳器?我該如何解決這個問題?

與感謝

回答

2

你的代碼沒有問題。當您通過Web服務器運行應用程序時,Web服務器由操作系統中的用戶進行管理(對於enginx或IIS中的應用程序池組來說沒有人考慮)。 您應該爲要保存數據的文件夾設置權限。這可以在您的託管文件管理器面板中完成,也可以通過直接訪問OS來完成。

1

的問題是,本地帳戶是無效的Active Directory上的遠程資源 - 你需要連接的計算機名$或匿名取決於你使用的是本地身份的類型。

我能夠在調試模式下上傳,但不能在發佈的網站上上傳,這樣可能會幫助你穆罕默德。

+0

其實這是承載我的應用程序的服務器。我不知道它的規格。 –

0

您確定服務器上存在ProductImages文件夾嗎?

您可以嘗試保存文件之前調用

Directory.CreateDirectory(this.Server.MapPath("~/ProductImages")) 

。如果它不存在,它將創建該目錄,或者如果它存在,則不做任何事情。

+0

感謝您的回覆。但是: - (它沒有工作,例外仍在發生。 –

0

我終於通過設置文件夾的權限解決了這個問題。我爲該文件夾設置了「應用程序池組」的寫入權限,現在可以通過我的應用上傳任何文件。

謝謝

-1

試試這個..上傳和數據庫插入值..

string filename = Path.GetFileName(FileUpload1.PostedFile.FileName); 
       FileUpload1.SaveAs(Server.MapPath("~/" + filename)); 
       Stream str = FileUpload1.PostedFile.InputStream;    
         con.Open(); 
         SqlCommand cmds = new SqlCommand("insert into datas(name,path,types,pricing)values(@name,@path,@types,@pricing)", con); 
         cmds.Parameters.AddWithValue("@name",d); 
         cmds.Parameters.AddWithValue("@path", filename); 
         cmds.Parameters.AddWithValue("@types", RadioButton1.Text); 
         cmds.Parameters.AddWithValue("@pricing", "FineGrained"); 
         cmds.ExecuteNonQuery(); 
         Response.Write("<script>alert('successfully uploaded');</script>"); 
相關問題