。 。使用CreateDirectory動態創建Web文件夾
我正在使用C#後端改進ASP.NET應用程序。我正在嘗試開發一個文件上傳器來與CKEditor一起工作。
我有一個< asp:FileUpload >用於搜索文件的對象,以及用戶輸入文件名的TextBox對象(爲此目的,我們假設TextBox ID =「SaveTo」),然後他想要保存文件的路徑。默認是我在我的Web.config中定義的一個文件夾(假設它是「/ Images/Saved」 - 注意:這是一個現有的文件夾,離開我的web根目錄)。所以,如果我運行我的代碼並保存一個文件(假設它是「SomeImage.jpg」),我的SaveTo文本框的內容是「/Images/Saved/SomeImage.jpg」。我的代碼然後使用文本框內容保存到/Images/Saved/SomeImage.jpg。那件作品很好。
這裏是我遇到麻煩的地方:如果用戶輸入「/Images/Saved/SomeFolder/SomeImage.jpg」,我希望我的代碼動態生成文件夾。換句話說,如果「/ Images/Saved」中不存在「SomeFolder」,我想創建它。
這不是很好。它不創建文件夾,並將文件保存到默認/ Images/Saved文件夾。
因此,我有幾個問題。
- 我想使用Directory.CreateDirectory來做到這一點。我能否使用web-root相關目錄(如「/ Images/Saved」),還是需要完全限定它?
- 如果我需要完全限定它,我可以使用URL(例如「http://www.mysite.com/Images/Saved」),還是我需要物理文件路徑(例如「c:\ wwwroot的\圖片\保存「)?
這裏是我的代碼片段:
if (this.MyFileUpload.HasFile) {
string SaveFile = "";
string SavePath = this.SaveTo.Text.Trim();
if (!SavePath.EndsWith("/")) { SavePath += "/"; }
// I'm guessing that I'll need to change "/" to "\" and fully qualify the path
getFileName = this.MyFileUpload.FileName;
SaveFile = System.Web.HttpContext.Current.Server.MapPath("~" + SavePath) + getFileName;
try
{
System.IO.FileInfo getFile = new System.IO.FileInfo(SaveFile);
getFile.Directory.Create();
this.MyFileUpload.SaveAs(SaveFile);
}
catch (Exception ex)
{
txtMessage.Text = getFileName + " save failed. " + ex.Message;
}
txtMessage.Text = "File " + getFileName + " saved successfully!";
}
您的代碼似乎工作。也許SaveTo.Text有不正確的路徑? – devundef
好吧,就是這一點。默認情況下,SaveTo.Text中的路徑是(使用我的示例)/ Images/Saved。如果有人輸入/ Images/Saved/SomeFolder,我希望它在/ Images/Saved下創建SomeFolder。 –