System.IO.FileNotFoundException: не удалось найти файл - PullRequest
0 голосов
/ 22 мая 2018

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

 <input type="file" name="file" />
 <button type="submit">Upload File</button>

и

[HttpPost]
    public IActionResult UploadFile(IFormFile file)
    {
        string FileName = file.FileName;
        if (file != null && file.Length != 0)
        {
            FileStream fileStream = new FileStream(FileName, FileMode.Open);
            using (StreamReader streamReader = new StreamReader(fileStream))
            {
                string line = streamReader.ReadLine();
            }

        }
    }

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Если вы пытаетесь прочитать загруженный файл с помощью потока, вы можете использовать следующее:

        string result;
        if (file != null && file.Length != 0)
        {
            using (var reader = new StreamReader(file.OpenReadStream()))
            {
               result = reader.ReadToEnd();  
            }
        }

Или, если вы пытаетесь сохранить загруженный файл где-то на сервере, вам следует использоватьМетод CopyTo, как в примере ниже,

        var destinationPath= Path.GetTempFileName(); //Change this line to point to your actual destination
        using (var stream = new FileStream(destinationPath, FileMode.Create))
        {
            await formFile.CopyToAsync(stream);
        }
0 голосов
/ 22 мая 2018

Используйте enctype = "multipart/form-data" внутри формы действий.Вы можете использовать бритву @using (Html.BeginForm())

@using (Html.BeginForm("UploadFile", "YourController", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file" />
    <button type="submit">Submit</button>
}

Пример представления исходного кода здесь

А внутри вашего контроллера вы можете использовать такой метод контроллера:

public async Task<IActionResult> UploadFile(IFormFile file)
{
    var uploadPath = Path.Combine(hostingEnv.WebRootPath, "uploadsfolder");

    using (var fileStream = new FileStream(Path.Combine(uploadPath, file.FileName), FileMode.Create))
    {
        await file.CopyToAsync(fileStream);
    }
    return RedirectToAction("Index");
 }

Пример контроллера исходного кода здесь

Это должно работать правильно

...