Получение System.IO.DirectoryNotFoundException: «Не удалось найти часть пути» после создания папки - PullRequest
0 голосов
/ 19 марта 2020

Я получаю сообщение об ошибке * System.IO.DirectoryNotFoundException: «Не удалось найти часть пути» * после создания каталога в файловой системе. Я пытаюсь создать папку в файловой системе, а затем добавить к ней файлы изображений, основываясь на вводе пользователя. Я получаю эту ошибку при попытке загрузить изображения после создания каталога. (Строка: file.SaveAs (Server.MapPath (filePath));)

Просмотр:

<div class="modal fade" id="addPortfolioModal" tabindex="-1" role="dialog" aria-labelledby="addPortfolioModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xlg" role="document">
    <div class="modal-content">
        <div class="modal-header">
            <h5 class="modal-title">Add Portfolio</h5>
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                <span aria-hidden="true">&times;</span>
            </button>
        </div>
        @using (Html.BeginForm("AddPortfolio", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" }))
        {
            <div class="modal-body">
                <div class="container">
                    <div class="row">
                        <div class="col-md-6 col-sm-12 modal-form-margin">
                            @Html.Label("title", "Title: ")
                        </div>
                        <div class="col-md-6 col-sm-12 modal-form-margin">
                            @Html.TextBox("title", null, new { type = "text", @class = "w-100", required = "required" })
                        </div>
                        <div class="col-md-12 col-sm-12 modal-form-margin">
                            @Html.Label("description", "Description: ")
                        </div>
                        <div class="col-md-12 col-sm-12 modal-form-margin">
                            @Html.TextArea("description", null, new { type = "text", @class = "w-100", @id = "description" })
                        </div>
                        <div class="col-md-6 col-sm-12 modal-form-margin">
                            @Html.Label("images", "Image(s): ")
                        </div>
                        <div class="col-md-6 col-sm-12 modal-form-margin">
                            <input type="file" name="imageFiles" id="imageFiles" required multiple />
                        </div>
                    </div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="submit" class="btn btn-primary">Add Portfolio</button>
            </div>
        }
    </div>
</div>

Контроллер:

[HttpPost]
    [ValidateInput(false)]
    public ActionResult AddPortfolio(string title, string description, HttpPostedFileBase[] ImageFiles)
    {
        if (!checkLoginCredentials())
        {
            return RedirectToAction("Login", "Home");
        }
        else if (ImageFiles.Count() < 1)
        {
            TempData["imagesFail"] = true;
        }
        else
        {
            string dir = "Content/img/portfolio/" + title;
            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(Server.MapPath("~/" + dir));
                List<PortfolioImageModel> images = new List<PortfolioImageModel>();
                string extension = "";
                string fileName = "";
                int orderNumCounter = 1;

                int portfolioResult = siteServices.addPortfolio(title, description);
                if(portfolioResult > 0)
                {
                    int portfolioId = siteServices.getPortfolioIdByTitle(title);

                    foreach (var file in ImageFiles)
                    {
                        if (file != null)
                        {
                            if (file.ContentLength > 0)
                            {
                                if (Path.GetExtension(file.FileName).ToLower() == ".jpg" || Path.GetExtension(file.FileName).ToLower() == ".png" || Path.GetExtension(file.FileName).ToLower() == ".jpeg" || Path.GetExtension(file.FileName).ToLower() == ".gif")
                                {
                                    extension = Path.GetExtension(file.FileName);
                                    var filePath = Path.Combine(dir, file.FileName);
                                    file.SaveAs(Server.MapPath(filePath));

                                    PortfolioImageModel temp = new PortfolioImageModel();
                                    temp.setImgLoc(fileName);
                                    temp.setPortfolioId(portfolioId);
                                    temp.setOrderNum(orderNumCounter);

                                    images.Add(temp);
                                    orderNumCounter++;
                                }
                            }
                        }
                    }

                    int imagesResult = siteServices.addPortfolioImages(images);
                    if(imagesResult < 1)
                    {
                        TempData["imagesFail"] = true;
                    }
                }
                else
                {
                    TempData["databaseConnectionFail"] = true;
                }


            }
            else
            {
                TempData["portfolioExists"] = true;
            }
        }

        return RedirectToAction("Portfolio", "Admin");
    }

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Проблема заключалась в том, что путь был передан в метод file.SaveAs () искал путь к переменной filePath внутри папки представления контроллера. Здесь было исправление (будет упрощение кода в будущем:

if (Path.GetExtension(file.FileName).ToLower() == ".jpg" || Path.GetExtension(file.FileName).ToLower() == ".png" || Path.GetExtension(file.FileName).ToLower() == ".jpeg" || Path.GetExtension(file.FileName).ToLower() == ".gif")
                                {
                                    extension = Path.GetExtension(file.FileName);
                                    fileName = file.FileName;
                                    file.SaveAs(Server.MapPath("../" + dir + "/" + fileName));

                                    PortfolioImageModel temp = new PortfolioImageModel();
                                    temp.setImgLoc(dir + "/" + fileName);
                                    temp.setOrderNum(orderNumCounter);

                                    images.Add(temp);
                                    orderNumCounter++;
                                }
0 голосов
/ 19 марта 2020

Просто измените это:

 string dir = "Content/img/portfolio/" + title.Trim().Replace(" ", "_");
  if (!Directory.Exists(Server.MapPath("~/" + dir)))
    {
      //Your Code
    }
...