【问题标题】:ASP.NET Core 2.1 File Upload DirectoryNotFoundException: Could not find a part of the pathASP.NET Core 2.1 文件上传 DirectoryNotFoundException:找不到路径的一部分
【发布时间】:2023-03-29 03:00:01
【问题描述】:

这是我上传文件时的控制器代码。出于某种原因,我不断收到此错误:

DirectoryNotFoundException: 找不到路径的一部分

[ValidateAntiForgeryToken]
[HttpPost]
public async Task<ActionResult> Save(UploadDocumentViewModel Input)
{
    var filePath = $"{this.hostingEnvironment.WebRootPath}/documents";
    foreach(var item in Request.Form.Files)
    {
        var fileName = ContentDispositionHeaderValue.Parse(item.ContentDisposition).FileName;
        fileName = fileName.Trim('"');
        var fullFilePath = Path.Combine(filePath, fileName);
        using(var stream = new FileStream(fullFilePath, FileMode.Create))
        {
            await item.CopyToAsync(stream);
        }
    }
    return this.Ok();
}

这是我要上传到的目录:

'C:\Users\uuu\Source\Repos\Applicat\Applicto\wwwroot\documents\2018-10-27.png'。

据我了解,它的意思是找不到路径?但是我手动创建了documents文件夹,还是会出现这个错误。

编辑:

控制器顶部:

private readonly ILogger<DocumentsController> logger;
private readonly IHostingEnvironment hostingEnvironment;

public DocumentsController(ILogger<DocumentsController> logger, IHostingEnvironment hostingEnvironment)
{
    this.logger = logger;
    this.hostingEnvironment = hostingEnvironment;
}

【问题讨论】:

  • 能否提供包含Save方法的Controller或服务构造函数?
  • 你在哪里创建的目录?
  • @TânNguyễn 我已经提供了构造函数
  • @Shyju 我在 wwwroot 文件夹中创建的

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


【解决方案1】:

我认为问题来自于获取物理路径。

这是我通常使用的正常方式(我已删除记录器,因为我在此示例中不使用它 - 只是为了使代码更短,但您可以定义并再次使用它):

public class DocumentsController : Controller
{
    // you should name the field(s) like this to make it/them difference
    private readonly IHostingEnvironment _hostingEnvironment;

    public DocumentsController(IHostingEnvironment hostingEnvironment)
    {
        _hostingEnvironment = hostingEnvironment;
    }

    [ValidateAntiForgeryToken]
    [HttpPost]
    public async Task<ActionResult> Save(UploadDocumentViewModel Input)
    {
        // NOTE: we don't need "/" character before the path, like "/documents"
        string filePath = Path.Combine(_hostingEnvironment.WebRootPath, "documents");

        // then, copy and paste your code to continue
    }
}

注意:由于我们使用 ASP.NET Core,我们希望返回 IActionResult 而不是 ActionResult

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多