IIS 7.5でWebサイトを取得していて、別のドライブにあるFilesフォルダにファイルをアップロードしようとしています。 ファイルという仮想フォルダをwwwrootフォルダに追加しました。IEnvironment.WebRootPathとIISの仮想ディレクトリ
仮想ファイルのフォルダパスがDであること:\ファイル
コントローラでのアップロードのための私のコード:
_ENV変数はIHostingEnvironmentとコンストラクタに注入しているが。
var filename = _env.WebRootPath + [email protected]"\files\{model.JobID}.{model.FileExt}";
using (FileStream fs = System.IO.File.Create(filename))
{
AttachFile.CopyTo(fs);
fs.Flush();
}
マシンに物理フォルダwwwroot \ filesがあるため、ローカルで動作します。しかし、それはプロダクションサーバ上で動作しないと、次のエラーました:
An unhandled exception has occurred: Could not find a part of the path 'C:\inetpub\Mysite\wwwroot\files\111214.png'.
をしかし、私はASPNET 4.6.1で別のウェブサイトを持っていると私はファイルをアップロードするServer.MapPathのを使用しました。そして、そのWebサイトで動作し、ファイルを正常にアップロードできます。
string SaveLocation = string.Format(@"{0}\{1}{2}", Server.MapPath("files"), JobID, FileExt);
この記事によれば、Server.MapPathのとWebRootPathが類似していると言います。 http://www.mikesdotnetting.com/article/302/server-mappath-equivalent-in-asp-net-core
しかし、私にはWebRootPathがウェブサイトのRootPathを与えるだけであると思われます。 Server.MapPathのような指定されたURLを評価するためのパラメータは受け入れません。
.Net Coreアプリケーションの物理パスをハードコードするのではなく、プロダクションサーバーでファイルをアップロードするにはどうすればよいですか?
アップデート1:
これは私がこれまで達する最高です...私たちは、このように別の場所を指すように、別の仮想URLにアクセスしたり、作成することができます。 ASPNetCore StaticFiles
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(@"D:\Files"),
RequestPath = new PathString("/Files"),
});
しかし、それだけで読み取り専用のURLであると私は「/Files/newfile.jpg」またはPath.Combine(_envを使用して、このパスにアップロードすることはできません:それは、文献http://mysite/Files/abc.jpg
を経由してアクセスすることができ.WebRootPath、 "newfile.jpg")。物理的に存在しないためです。ここで
WebRootPathはIIS vdirについて認識していません。この問題を解決する方法を見つけた場合は、IWebHostBuilder.UseWebRoot(mywebroot) – Tratcher
で直接設定する必要があります。 – Ruchan
@Ruchan IIS仮想フォルダの代わりに "D:\ mySharedfiles \"を使用して物理フォルダに直接書き込むことができます – TTCG