首页 > 解决方案 > 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");
        }

尝试删除时我也得到一个空引用

标签: c#asp.netasp.net-core-mvcpath-finding

解决方案


我相信你想要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");
}

推荐阅读