尝试将图像保存到wwwroot时DirectoryNotFoundException

时间:2018-05-04 03:46:20

标签: c# asp.net-core-mvc

使用this question我想出了这个代码来保存文件

$ chmod +x /home/ceriak/ruby/test.rb

但是在实例化[HttpPost] public IActionResult Upload(string office, IFormFile file) { if (file.Length > 0) { var filePath = Path.GetFullPath(Path.Combine(_environment.WebRootPath, _configuration["SydneyFloorplanPath"])); using (var fileStream = new FileStream(filePath, FileMode.Create)) { file.CopyTo(fileStream); } } return RedirectToAction("Index", new{office = office}); }

时,我遇到了一个非常烦人的问题
  

System.Private.CoreLib.dll中发生了'System.IO.DirectoryNotFoundException'类型的异常,但未在用户代码中处理:'找不到路径的一部分'C:\ images \ Floorplan \ sydney。 PDF ''

但那不是我需要的道路。 FileStream文件夹位于Images ...

下的项目中

如果wwwroot\images实际上没有给我一个可用的相对路径,那么它有什么意义呢?

请注意,WebRootPath是注入的_environment

我也注意到,如果我打电话

IHostingEnvironment

变量包含完整路径... var two = _environment.WebRootPath;

但在致电"C:\\Users\\bassie\\source\\repos\\TFS\\DSSTools\\wwwroot"后,我突然有Path.Combine ...为什么?

修改

_environment是"C:\\images\\Floorplan\\sydney.pdf",例如:

IHostingEnvironment

1 个答案:

答案 0 :(得分:0)

我设法使用

[HttpPost]
public IActionResult Upload(string office, IFormFile file)
{
    var webRootPath  = _environment.WebRootPath;
    var floorPlanPath =  _configuration["SydneyFloorplanPath"];

    if (file.Length > 0) {
        var filePath1 = Path.Combine(floorPlanPath,webRootPath.ReplaceFirst("/", ""));

        using (var fileStream = new FileStream(filePath1, FileMode.Create)) {
            file.CopyTo(fileStream);
        }
    }
    return RedirectToAction("Index", new{office = office});
}

ReplaceFirst是一个简单的StringExtension

public static string ReplaceFirst(this string text, string search, string replace)
{
    int pos = text.IndexOf(search);
    if (pos < 0)
    {
        return text;
    }
    return $"{text.Substring(0, pos)}{replace}{text.Substring(pos + search.Length)}";
}

所以/中的前导webRootPath似乎打破了Path.Combine来电