Directory.NotFoundException загрузки файла ASP.NET Core 2.1: не удалось найти часть пути - PullRequest
0 голосов
/ 10 ноября 2018

Это код моего контроллера при загрузке файлов. По какой-то причине я продолжаю получать эту ошибку:

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 \ ууу \ Source \ Repos \ заявки Листов \ Applicatto \ Wwwroot \ документы \ 2018-10-27.png'

Насколько я понимаю, это говорит о том, что путь не может быть найден? Но я создал папку с документами вручную, и эта ошибка все еще происходит.

EDIT:

Верх контроллера:

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

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

1 Ответ

0 голосов
/ 10 ноября 2018

Я думаю, что проблема возникла из-за физического пути.

Вот обычный способ, которым я обычно пользуюсь ( Я удалил регистратор, потому что я не использую его в этом примере - просто чтобы сделать код короче, но вы можете определить и использовать его снова ):

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, мы хотим вернуть IActionResult вместо ActionResult.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...