質問: 現在、asp.netを使ってWebアプリを使っているのですが、Webサーバー上にファイルを保存したい場合、指定したフォルダをmapPathで絶対パスに変換すると思うのですが、そのまま相対パスを記載じゃダメなのでしょうか? なぜダメなのかも教えて頂けると嬉しいです。 よろしくお願いします。
回答: > > そのまま相対パスを記載じゃダメなのでしょうか? > > > 質問者さんの言うのは、例えばアプリケーションルート直下に UploadedFiles フォルダを作ったとして、そこにアップロードされたファイルを保存する場合、 ``` string path = Server.MapPath("~/UploadedFiles") + "\\" + filename; postedFile.SaveAs(path); ``` のようにするが、Server.MapPath を使わずに、上のコードで言うと SaveAs メソッドの引数 path に直接 "/UploadedFiles/ファイル名" というような文字列を指定できないかということですよね。 答えは「できません」です。 何故かというと、SaveAs メソッドの引数は Windows OS ファイルシステムのパスでないと理解できないからです。 **【追記】** 以下の記事の「セキュリティに関する考慮事項」のセクションを読んでください。 ASP.NET Core でファイルをアップロードする それに「アプリと同じディレクトリ ツリーに、アップロードしたファイルを保持しないでください」と書いてありますが、アプリケーションルート直下にフォルダを作って保存するのがセキュリティ的に間違っているのかもしれません。 「専用のファイル アップロード領域」を作って、そのパスを SavaAs の引数にすれば、Server.MapPath を使う必要はなくなるので、質問者さんの問題は解消するかも。