Как мога да задам разрешения за папка за еластично приложение за Windows на бобено стъбло?

В момента изграждам приложение C# WebApi 2, което ще кача в екземпляр на Amazon Elastic Beanstalk за внедряване. Засега имам успех и на моята локална машина току-що завърших тестването на възможността за качване на файлове, за да могат клиентите да качват изображения.

Начинът, по който става, е, че приемам multipart/formdata в Web Api и запазвам временния файл (с произволно име като BodyPart_24e246c7-a92a-4a3d-84ef-c1651416e667) в папката App_Data. Временният файл се поставя в S3 Bucket и аз създавам препратка към него в моята база данни на SQL Server.

Тестването работи добре с локално качване на един или няколко файла, но когато внедря приложението в Elastic Beanstalk и се опитам да кача, получавам грешки като „Не мога да намеря част от пътя „C:\inetpub\wwwroot\sbeAPI_deploy\App_Data \BodyPart_8f552d48-ed9b-4ec2-9986-88cbffd673ee'" или подобен, който казва, че достъпът е напълно отказан.

Опитвам се да намеря решението онлайн от няколко часа, но документацията на AWS е навсякъде и уроците/другите въпроси изглеждат остарели. Вярвам, че има нещо общо с липсата на разрешение за запис на временните файлове на сървъра EC2, но не мога да разбера как да го поправя.

Благодаря много предварително.


person Elie Zeitouni    schedule 30.07.2014    source източник
comment
Изправени пред същия проблем, разрешавали ли сте някога това? Подозирам, че има начин за качване на специфична за EC2 конфигурация.   -  person DivanMoller    schedule 14.10.2014
comment

@user755806 Не вярвам, че въпросът ви е получил отговор. Взех вашия код, но използвах примерния низ „foo“, добавих по-ниска функция и също така намерих дължината на върнатия хеш. В sqlplus или клиента на Java база данни за sql разработчик на Oracle можете да използвате това, за да извикате md5sum на стойност. Форматите на колоните изчистват презентацията.

column hash_key format a34;
column hash_key_len format 999999;
select dbms_obfuscation_toolkit.md5(
          input => UTL_RAW.cast_to_raw('foo')) as hash_key,
       length(dbms_obfuscation_toolkit.md5(
          input => UTL_RAW.cast_to_raw('foo'))) as hash_key_len
 from dual;

Наборът от резултати

HASH_KEY                           HASH_KEY_LEN
---------------------------------- ------------
acbd18db4cc2f85cedef654fccc4a4d8             32

е същата стойност, която се връща от команда md5sum на Linux.

echo -n foo | md5sum
acbd18db4cc2f85cedef654fccc4a4d8  -
  1. Да, можете да извикате или изпълните sql израза директно в sqlplus или sql developer. Тествах sql израза и в двата клиента срещу 11g.
  2. Можете да използвате всеки C, C#, Java или друг език за програмиране, който може да изпрати изявление към базата данни. Базата данни от другата страна на разговора трябва да може да разбере sql оператора. В случай на 11 g кодът ще работи.
  3. @tbone предоставя отлично предупреждение за оттеглянето на dbms_obfuscation_toolkit. Това обаче не означава, че вашият код е неизползваем в 12c. Ще работи, но в крайна сметка ще искате да преминете към пакет dbms_crypto. dbms_crypto не е наличен в моята версия на 11g.
  -  person Elie Zeitouni    schedule 29.10.2014


Отговори (5)


Това вече е възможно от април 2013 г., вижте също тук: Основно стъпките, които трябва да изпълните, са следните:

  1. Създайте папка, наречена .ebextensions, в най-горното ниво на вашия проект чрез инструмента за изследване на решенията
  2. Добавете в тази папка вашия конфигурационен файл, напр. myapp.config (заменете myapp с името на приложението на вашето Elastic Beanstalk)
  3. Добавете кода, показан отдолу, към този конфигурационен файл, който току-що създадохте. Заменете MyApp с името на вашия проект (не име на решение), показано във Visual Studio
  4. Всичко е готово!! Уверете се, че има файл в App_Data, в противен случай Visual Studio няма да го публикува.

    {
        "containercommands": {
            "01-changeperm": {
                "command": "icacls \"C:/inetpub/wwwroot/MyApp_deploy/App_Data\" /grant DefaultAppPool:(OI)(CI)"
            }
        }
    }
    
person bicycle    schedule 10.12.2014
comment
Как го осъществявате от WebAPI? AppDomain.CurrentDomain.BaseDirectory + @App_Data\; Изглежда дава 'C:\inetpub\wwwroot\App_Data'. Все още издава грешки за отказан достъп. Опитах се да променя конфигурационния файл, за да сочи към 'C:\inetpub\wwwroot\App_Data' без резултат. - person Dasith Wijes; 13.12.2016
comment
Опитвам се да направя това и не работи - някакъв съвет? - person BLuM; 13.03.2017
comment
Командите на контейнера вече са container_commands, а 01-changeperm е 01-aclchange. Вижте docs .aws.amazon.com/elasticbeanstalk/latest/dg/ - person jamos; 20.10.2017
comment
И аз имам някои проблеми с това. Пускането на вашето предложение изглежда не е довело до никакви резултати. Все още ли сте на разположение да помогнете? Ето моята информация stackoverflow.com/questions/52028876/ - person Nieminen; 28.08.2018
comment
Как да създам този myapp.config файл (използвайки VS 2019 | .net core 3.1), но той приема този файл като xml с това разширение и не може да ми позволи да поставя този код вътре в него. - person Dave; 21.04.2021

За да дадете разрешение за запис на вашия DefaultAppPool, можете
да създадете папка .ebextensions
да създадете конфигурационен файл и да го поставите във вашата папка .ebextensions

Това ще промени разрешението за вашата wwwroot папка

container_commands:
 01-changeperm :
  command : 'icacls "C:\\inetpub\\wwwroot" /grant "IIS APPPOOL\DefaultAppPool:(OI)(CI)F"'
person ynot    schedule 15.08.2019

Имах същия проблем (не мога да пиша във файл в папката App_Data на моето уеб приложение на Elastic Beanstalk).

В моя случай беше достатъчно да създам фиктивен файл в папката App_Data в моя проект на Visual Studio. Когато направих това, папката App_Data беше създадена по време на внедряването с разрешения, които позволяват на уеб приложението да пише в нея.

Няма нужда .ebextensions да променя разрешенията за папка.

person Joe    schedule 10.01.2019

Папката App_Data няма разрешения за запис по подразбиране и ще трябва да зададете подходящи разрешения по време на внедряването на вашите приложения.

Вижте тази публикация за подробно обяснение как да го направите: http://thedeveloperspace.com/granting-write-access-to-asp-net-apps-hosted-on-aws-beanstalk/

person Shameel    schedule 23.09.2019

Този въпрос е доста стар, но за всеки друг, който в крайна сметка има същия проблем. Имах същия проблем с AWS. Свържете се с вашето копие и променете свойствата на папката, в която искате да качите файлове. Изберете папката, на която искате да предоставите достъп за четене/запис. Кликнете върху свойствата и задайте разрешенията по този начин.

Проблемът ми беше с качването на изображения на сървъра. Не можах да го поставя в папката App_Data, тъй като това е специална оферта, запазена само за приложението и имах нужда изображенията да бъдат достъпни чрез URL адреса. Затова създадох друга папка „Качвания“. Публикувах моя API, след което се свързах с екземпляра чрез отдалечен работен плот. Намерете папката Content и задайте свойствата за четене/запис за DefaultAppPool. Това реши проблема ми, надявам се това да помогне на някого там.

person Emmanuel    schedule 20.06.2017
comment
това е за еластично бобено стъбло. нямате ec2 достъп по подразбиране и проваля целта в среда за автоматично мащабиране. - person Eric Kelly; 06.08.2018