. .
我正在使用 C# 后端改造 ASP.NET 应用程序。我正在尝试开发一个文件上传器来使用 CKEditor。
我有一个用于搜索文件的 <asp:FileUpload> 对象和一个 TextBox 对象(为此,假设 TextBox ID = "SaveTo"),用户在其中输入文件名和路径(s )他想要保存文件。默认是我在 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-relative 目录(如“/Images/Saved”),还是需要完全限定它?
- 如果我需要完全限定它,我可以使用 URL(例如“http://www.mysite.com/Images/Saved”),还是需要物理文件路径(例如“c:\wwwroot\Images \保存”)?
这是我的代码片段:
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!";
}