【问题标题】:How can I set folder permissions for elastic beanstalk windows application?如何为弹性 beanstalk windows 应用程序设置文件夹权限?
【发布时间】:2014-09-22 17:31:42
【问题描述】:

我目前正在构建一个 C# WebApi 2 应用程序,我将上传到 Amazon Elastic Beanstalk 实例进行部署。到目前为止我已经成功了,在我的本地机器上,我刚刚完成了文件上传功能的测试,以便客户端上传图片。

它的方式是我接受 Web Api 中的 multipart/formdata 并将临时文件(使用随机名称,如 BodyPart_24e246c7-a92a-4a3d-84ef-c1651416e667)保存到 App_Data 文件夹。临时文件被放入一个 S3 存储桶中,我在我的 SQL Server 数据库中创建了一个对它的引用。

测试在本地上传单个或多个文件时效果很好,但是当我将应用程序部署到 Elastic Beanstalk 并尝试上传时,我收到类似 "Could not find a part of the path 'C:\inetpub\wwwroot\ sbeAPI_deploy\App_Data\BodyPart_8f552d48-ed9b-4ec2-9986-88cbffd673ee'" 或类似的说法完全拒绝访问。

我已经尝试在网上找到解决方案几个小时了,但是 AWS 文档到处都是,教程/其他问题似乎已经过时了。我认为这与没有权限在 EC2 服务器上写入临时文件有关,但我不知道如何修复它。

非常感谢。

【问题讨论】:

  • 面对同样的问题,你有没有解决过这个问题?我怀疑有办法上传 EC2 特定的配置。
  • 恐怕不是 :( 这个问题和其他一些问题导致我们切换到 Microsoft Azure,它最终更适合 .NET 应用程序。

标签: windows amazon-web-services amazon-ec2 asp.net-web-api amazon-elastic-beanstalk


【解决方案1】:

自 2013 年 4 月以来这已经成为可能,另请参阅 here:基本上您需要执行的步骤如下:

  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)"
            }
        }
    }
    

【讨论】:

  • 如何从 WebAPI 访问它? AppDomain.CurrentDomain.BaseDirectory + @"App_Data\";似乎给'C:\inetpub\wwwroot\App_Data'。它仍然抛出拒绝访问错误。我尝试将配置文件更改为指向 'C:\inetpub\wwwroot\App_Data' 无济于事。
  • 我正在尝试这样做,但它不起作用 - 有什么提示吗?
  • “containercommands”现在是“container_commands”,“01-changeperm”是“01-aclchange”。见docs.aws.amazon.com/elasticbeanstalk/latest/dg/…
  • 我也遇到了一些问题。运行您的建议似乎没有产生任何结果。你还可以帮忙吗?这是我的信息stackoverflow.com/questions/52028876/…
  • 如何创建这个 myapp.config 文件(使用 VS 2019 | .net core 3.1)但是它把这个文件作为带有这个扩展名的 xml 文件,不能让我把这个代码放在里面。跨度>
【解决方案2】:

要授予 DefaultAppPool 写入权限,您可以
创建一个 .ebextensions 文件夹
创建一个配置文件并将其放在您的 .ebextensions 文件夹中

这将更改对您的 wwwroot 文件夹的权限

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

【讨论】:

    【解决方案3】:

    我遇到了同样的问题(无法写入 Elastic Beanstalk 上我的 Web 应用程序的 App_Data 文件夹中的文件)。

    在我的情况下,在我的 Visual Studio 项目的 App_Data 文件夹中创建一个虚拟文件就足够了。当我这样做时,App_Data 文件夹是在部署期间创建的,具有允许 Web 应用程序写入它的权限。

    .ebextensions 无需更改文件夹权限。

    【讨论】:

      【解决方案4】:

      App_Data 文件夹默认没有写入权限,您必须在部署应用时设置适当的权限。

      查看此帖子以获取有关如何操作的详细说明:http://thedeveloperspace.com/granting-write-access-to-asp-net-apps-hosted-on-aws-beanstalk/

      【讨论】:

        【解决方案5】:

        这个问题已经很老了,但对于任何最终遇到同样问题的人来说。我对 AWS 也有同样的问题。连接到您的实例并更改要将文件上传到的文件夹的属性。选择您要授予读/写访问权限的文件夹。单击属性并以这种方式设置权限。

        我的问题是将图像上传到服务器。我不能将它放在 App_Data 文件夹中,因为这是仅为应用程序保留的特别优惠,我需要通过 URL 访问图像。所以我创建了另一个文件夹“Uploads”。发布了我的 api,然后通过远程桌面连接到实例。找到 Content 文件夹,并将 DefaultAppPool 的属性设置为读/写。这解决了我的问题,希望这可以帮助那里的人。

        【讨论】:

        • 这适用于 elasticbeanstalk。默认情况下,您没有 ec2 访问权限,并且在自动缩放环境中无法达到目的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        • 2016-04-28
        • 2013-09-10
        • 2011-02-15
        • 2012-03-02
        • 1970-01-01
        相关资源
        最近更新 更多