c# - ASP.NET CORE 5 MVC 如何将绝对路径转换为相对路径?
问题描述
因此在项目中,用户可以上传、下载、删除、预览和搜索(实时)文件。这些文件存储在 wwwroot 文件夹内名为“Uploads”的文件夹中。截至目前,代码具有绝对路径,但项目需要在不同的计算机上,所以我需要相对路径,谁能帮我提供一个示例语法?
[HttpPost]
public async Task<IActionResult> Index(IFormFile fifile, string category)
{
string path = @"C:\Users\panara5\source\repos\Proiect2PracticaClona\Proiect2PracticaClona\wwwroot\Uploads\";
var fisave = Path.Combine(path, fifile.FileName);
var stream = new FileStream(fisave, FileMode.Create);
await fifile.CopyToAsync(stream);
Files fileModel=new Files()
{
info = fifile.FileName,
category = category
};
_fileRepository.AddFile(fileModel);
stream.Close();
files = _fileRepository.GetFileList();
return RedirectToAction("Index",files);
}
public IActionResult Index(string id)
{
files = _fileRepository.GetFileList();
if (id == null)
return View(files);
List<Files> sortedfiles = new List<Files>();
foreach (var item in files)
{
if (item.category == id)
{
sortedfiles.Add(item);
}
}
return View(sortedfiles);
}
public IActionResult Delete(string filedel)
{
filedel = Path.Combine("~/Uploads/", filedel);
FileInfo fi = new FileInfo(filedel);
if (fi != null)
{
System.IO.File.Delete(filedel);
fi.Delete();
}
return RedirectToAction("Index");
}
尝试删除时我也得到一个空引用
解决方案
我相信你想要IWebHostEnvironment.WebRootPath
您需要使用依赖注入来访问它,但之后,您可以只引用和 Path.Combine。见下文:
public class FileController : Controller
{
private readonly IWebHostEnvironment environment;
public FileController(IWebHostEnvironment env)
{
this.environment = env;
}
private string UploadFilePath() => Path.Combine(environment.WebRootPath, "uploads");
}
推荐阅读
- azure-functions - 如何使用来自 Dynamics 365 的数据创建具有天蓝色功能的二维码
- amazon-cloudfront - aws Cloudfront 中的维护页面
- php - 有什么方法可以将我的 php 应用程序从计算机服务到整个互联网?
- python-3.x - 根据指定值评估集合中所有可能的值组合
- .htaccess - 如何从 .htaccess 文件重定向 URL
- node.js - 区分 nginx 服务器上的公用文件夹
- python - 如何将 Django 模型限制为单个一对一关系?
- python - 无法使用 selenium python 检索 web 表的所有 tr 元素
- database - 如何在flutter中实现新的数据库源
- math - 如何找到对象所有面后面的点的最简单方程?