。
我正在使用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文件夹中。
有了这个,我有几个问题。
这是我的代码段:
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!";
}
答案 0 :(得分:2)
if (this.MyFileUpload.HasFile) {
string SaveAs = this.SaveTo.Text.Trim().Replace('\\','/');
string SaveFile = SaveAs;
// Pull SavePath from web.config (should check that key exists first)
string SavePath = System.Web.Configuration.WebConfigurationManager.AppSettings["SaveDirectory"];
string SystemPath = string.Empty;
// Handle case where SaveAs contains directory
if (SaveAs.LastIndexOf("/") > -1) {
SavePath = SavePath.TrimEnd('/') + "/" + SaveAs.Substring(0,SaveAs.LastIndexOf("/") + 1);
SaveFile = SaveFile.Substring(SaveFile.LastIndexOf("/") + 1);
}
if (!SavePath.EndsWith("/"))
SavePath += "/";
// Find the system path
SystemPath = System.Web.HttpContext.Current.Server.MapPath(SavePath);
// Ensure the system path exists
if (!System.IO.Directory.Exists(SystemPath))
System.IO.Directory.CreateDirectory(SystemPath);
// Ensure a filename was entered, if not use original file name
if (string.IsNullOrEmpty(SaveFile))
SaveFile = MyFileUpload.FileName;
try
{
this.MyFileUpload.SaveAs(SystemPath + SaveFile);
}
catch (Exception ex)
{
txtMessage.Text = getFileName + " save failed. " + ex.Message;
}
txtMessage.Text = "File " + getFileName + " saved successfully!";
}