. .
C# バックエンドを使用して、ASP.NET アプリケーションの改造に取り組んでいます。CKEditor で動作するファイル アップローダーを開発しようとしています。
ファイルの検索に使用している <asp:FileUpload> オブジェクトと、ユーザーがファイル名とパス (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!";
}