Доступ запрещен при сохранении в путь к файлу - PullRequest
0 голосов
/ 13 апреля 2020

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

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 file = IGT.imagePath + "\\Components\\";

        //bool exists = System.IO.Directory.Exists(Server.MapPath(file));

        //if (!exists)
        //   System.IO.Directory.CreateDirectory(Server.MapPath(file));

        var filename = file + id.ToString() + ".jpg";

        if (!System.IO.Directory.Exists(file))
        {
            System.IO.Directory.CreateDirectory(file);
        }

        photo.SaveAs(filename);
        c.Image_Url = IGT.baseUrl + "/Content/images/Components/" + id.ToString() +".jpg";
        db.SaveChanges();
    }

Но я получаю сообщение об ошибке photo.SaveAs(filename);, говорящее

System.UnauthorizedAccessException: «Доступ к пути» C: \ Users \ chris \ Source \ Repos \ inventory2.0 \ PIC_Program_1.0 \ Content \ images \ Components \ 498.jpg 'запрещено.'

Почему это так и как можно Я это исправлю?

Ответы [ 2 ]

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

Какой бы пользователь ни выполнял этот код, он не имеет разрешения на запись в этот путь к файлу. Если вы go до C: \ Users \ chris \ Source \ Repos \ inventory2.0 \ PIC_Program_1.0 \ Content \ images \ Components, щелкните правой кнопкой мыши, свойства, вкладка Безопасность, вы увидите пользователей, которые имеют разрешения и что это за разрешения. Вы можете добавлять или редактировать ваши разрешения пользователей там.

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

Мне кажется, проблема в том, что у пользователя вашего приложения нет прав доступа к вашей папке. Если вы тестируете это в VS IIS express, вам следует предоставить разрешение для текущего пользователя.

Однако, если вы получаете это сообщение об ошибке от IIS Server. Затем вы должны предоставить разрешение для удостоверения пула приложений (IIS Apppool \ apppoolname).

Монитор процессов может помочь вам постоянно исправлять ошибку «отказ в доступе». Вам просто нужно создать фильтр для Result = "доступ запрещен". Затем вам сообщат, кому и какое разрешение требуется.

https://docs.microsoft.com/en-us/sysinternals/downloads/procmon

...