Lyn*_*ark 6 blazor-server-side
我正在尝试在我的 blazor 应用程序( blazor 服务器应用程序)的页面中使用以下代码
@inject IWebHostEnvironment WebhostEnvironment
public IWebHostEnvironment _environment { get; set; }
var uploads = Path.Combine(_environment.WebRootPath, "uploads");
//string uploads = @"z:\Downloads";
path = uploads + "\\" + file.FileInfo.Name;
FileStream filestream = new FileStream(path, FileMode.Create, FileAccess.Write);
file.Stream.WriteTo(filestream);
filestream.Close();
file.Stream.Close();
Run Code Online (Sandbox Code Playgroud)
将文件保存在 wwwroot 文件夹内的上传文件夹中,但是当我执行代码时,我得到“对象引用未设置为对象的实例”。
问题 1. 是什么原因导致该错误?2.将上传内容保存在 wwwroot 子文件夹中是最佳途径吗?3. 在网络服务器环境中,是否可以简单地将网络路径设置在字符串变量中作为替代方案?当我取消注释上面的字符串上传行时,上传成功到我的家庭网络上的指定网络驱动器。
感谢您提供任何信息...
小智 5
当前的解决方案对我来说不起作用,因为我正在使用 Blazor wasm。可以通过访问AppDomain或AppContext找到物理路径:
string rootpath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot");
Run Code Online (Sandbox Code Playgroud)
要访问两者,您可以使用:
var b = $"Physical location {AppDomain.CurrentDomain.BaseDirectory}";
var c = $"AppContext.BaseDir {AppContext.BaseDirectory}";
Run Code Online (Sandbox Code Playgroud)
小智 4
我假设我们谈论的是“Blazor 服务器端”。
物理 wwwroot 文件夹可以通过以下方式找到:
string rootpath = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "wwwroot");
Run Code Online (Sandbox Code Playgroud)
将上传的文件保存到 wwwroot 的子目录有时并不是最佳选择,因为出于安全原因,该位置必须是只读的。您的用户需要下载回上传的文件吗?如果没有,wwwroot 之外的临时文件夹将是更好的位置。
网络路径?这是可能的,但您的 Web 应用程序应该在具有此位置的读写权限的凭据下运行。通常,Web 应用程序使用受限制的凭据运行。
结论:您的最后两个问题必须考虑到安全问题。
| 归档时间: |
|
| 查看次数: |
14017 次 |
| 最近记录: |