Как создать виртуальный каталог в IIS Express, используя C# - PullRequest
0 голосов
/ 13 апреля 2020

Здравствуйте, у меня в контроллере есть метод, который выглядит следующим образом.

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult UploadImage(int? id)
        {
            if (id == null)
                return HttpNotFound();

            Component c = db.Components.Find((int)id);
            HttpPostedFileBase photo = Request.Files["image"];

            if (photo != null && photo.ContentLength > 0)
            {
                var filename = IGT.imagePath + "\\Components\\" + id.ToString() + ".jpg";

                photo.SaveAs(filename);
                c.Image_Url = IGT.baseUrl + "/Content/images/Components/" + id.ToString() + ".jpg";
                db.SaveChanges();
            }
            else
            {
                if (Request["imageurl"] != null && Request["imageurl"].Length > 0)
                {
                    // download this file
                    WebClient wc = new WebClient();
                    wc.DownloadFile(Request["imageurl"], IGT.imagePath + "\\Components\\" + id.ToString() + ".jpg");
                    c.Image_Url = IGT.baseUrl + "/Content/images/Components/" + id.ToString() + ".jpg";
                    db.SaveChanges();
                }

            }
            HttpPostedFileBase reference = Request.Files["referencefile"];

            if (reference != null && reference.ContentLength > 0)
            {
                // Upload the origin file and create a URL 
                var filename = IGT.contentPath + "\\uploads\\Comp-" + id.ToString() + "-" + System.IO.Path.GetFileName(reference.FileName);
                reference.SaveAs(filename);
                c.Reference_Url = IGT.baseUrl + "/Content/uploads/Comp-" + id.ToString() + "-" + System.IO.Path.GetFileName(reference.FileName);
                db.SaveChanges();

            }

            return RedirectToAction("Edit", new { id = id });
        }

Но в настоящее время, когда он достигает

photo.SaveAs(filename);

Я получаю ошибку сообщение

System.IO.DirectoryNotFoundException: «Не удалось найти часть пути» C: \ Users \ chris \ Source \ Repos \ inventory2.0 \ PIC_Program_1.0 \ Content \ images \ Components \ 498.jpg

Как создать блок try catch, чтобы, если папка не существовала в IIS Express, она создавалась?

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

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

 if (!Directory.Exists(appDataPath)) {
     Directory.CreateDirectory(appDataPath);
 }

и использовать метод directory.SetAccessControl(security); для установки разрешения для этой папки.

см. Ссылки ниже для получения дополнительной информации. подробно:

https://docs.microsoft.com/en-us/dotnet/api/system.io.directory.createdirectory?view=netframework-4.8

C# Создание каталога и настройка прав доступа

https://www.kunal-chowdhury.com/2016/02/folder-permission.html

0 голосов
/ 13 апреля 2020

Можете ли вы попробовать этот код:

if (!System.IO.Directory.Exists("your folder")) {
                System.IO.Directory.CreateDirectory("Your Folder");
            }

Кроме того, убедитесь, что ваш пользователь IIS имеет доступ на чтение / запись к этому каталогу папки.

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