使用CreateDirectory动态创建web文件夹



我正在使用C#后端改造ASP.NET应用程序。我正在尝试开发一个文件上传器来与CKEditor合作。

我有一个<asp:FileUpload>对象,以及一个TextBox对象(为此,假设TextBox ID="SaveTo"),用户在其中输入文件名和保存文件的路径。默认是我在Web.config中定义的文件夹(假设它是"/Images/Saved"——注意:这是我的Web根目录下的现有文件夹)。

因此,如果我运行我的代码并保存一个文件(假设它是"SomeImage.jpg"),我的SaveTo文本框的内容是"/Images/Saved/SomeImagejpg"。然后我的代码使用文本框内容保存到/Images/Saved/SomeImage.jpg。这篇文章很好。

这就是我遇到麻烦的地方:如果用户输入"/Images/Saved/SomeFolder/SomeImage.jpg",我希望我的代码动态生成一个文件夹。换句话说,如果"/Images/Saved"中不存在"SomeFolder",我想创建它。

结果不太好。它不会创建文件夹,而是将文件保存到默认的/Images/Saved文件夹中。

说到这里,我有几个问题。

  1. 我正在尝试使用Directory.CreateDirectory来执行此操作。我可以使用web根相对目录(如"/Images/Saved")吗?还是需要完全限定它
  2. 如果我需要完全限定它,我可以使用URL(例如"http://www.mysite.com/Images/Saved"),还是需要物理文件路径(例如"c:\wwwroot\Images\save")

这是我的代码片段:

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!";
}
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!";
}

相关内容

  • 没有找到相关文章

最新更新