我目前正在构建一个C#WebApi 2应用程序,我将上传到Amazon Elastic Beanstalk实例进行部署。到目前为止我已经取得了成功,在我的本地机器上,我刚刚完成了文件上传功能的测试,以便客户上传图像。
它的方式是我接受Web Api中的multipart / formdata并将临时文件(使用随机名称,如BodyPart_24e246c7-a92a-4a3d-84ef-c1651416e667)保存到App_Data文件夹。临时文件放入S3 Bucket,我在SQL Server数据库中创建一个引用。
在本地上传单个或多个文件时,测试工作正常,但是当我将应用程序部署到Elastic Beanstalk并尝试上传时,我会收到错误,例如"无法找到路径的一部分&C; C :\ inetpub \ wwwroot \ sbeAPI_deploy \ App_Data \ BodyPart_8f552d48-ed9b-4ec2-9986-88cbffd673ee'" 或类似的人说完全拒绝访问。
我一直在尝试在线找到解决方案几个小时,但AWS文档已经到处都是,教程/其他问题似乎已经过时了。我认为这与没有在EC2服务器上编写临时文件的权限有关,但我无法弄清楚如何修复它。
非常感谢。
答案 0 :(得分:3)
自2013年4月以来已经可以实现,另请参阅here:基本上您需要执行的步骤如下:
MyApp
替换为Visual Studio 全套!!确保 App_Data 中有一个文件,否则Visual Studio不会发布它。
{
"containercommands": {
"01-changeperm": {
"command": "icacls \"C:/inetpub/wwwroot/MyApp_deploy/App_Data\" /grant DefaultAppPool:(OI)(CI)"
}
}
}
答案 1 :(得分:0)
这个问题已经很久了,但对于那些最终遇到同样问题的人来说。我在AWS遇到了同样的问题。连接到您的实例并更改要将文件上载到的文件夹的属性。选择要授予读/写访问权限的文件夹。单击属性并以该方式设置权限。
我的问题是将图片上传到服务器。我无法将其放在App_Data文件夹中,因为这是仅为应用程序保留的特殊优惠,我需要通过URL访问图像。所以我创建了另一个文件夹" Uploads"。发布我的api然后通过远程桌面连接到实例。找到Content文件夹,并将属性设置为DefaultAppPool的读/写。这解决了我的问题,希望这有助于那里的人。
答案 2 :(得分:0)
我遇到了同样的问题(无法在Elastic Beanstalk上写到Web应用程序的App_Data
文件夹中的文件)。
就我而言,在我的Visual Studio项目的App_Data
文件夹中创建一个虚拟文件就足够了。当我这样做时,App_Data
文件夹是在部署期间创建的,具有允许Web应用程序对其进行写入的权限。
无需.ebextensions
更改文件夹权限。
答案 3 :(得分:0)
要授予对DefaultAppPool的写权限,您可以
创建一个.ebextensions文件夹
创建一个配置文件并将其放在您的.ebextensions文件夹中
这将更改您的wwwroot文件夹的权限
imageData.SetDimensions((pixeldata.shape[0],pixeldata.shape[1],1))
imageData.SetSpacing([1,1,1])
imageData.SetOrigin([0,0,0])
答案 4 :(得分:0)
默认情况下,App_Data文件夹不具有写权限,并且在部署应用程序时必须设置适当的权限。
请查看此帖子,以详细了解操作方法:http://thedeveloperspace.com/granting-write-access-to-asp-net-apps-hosted-on-aws-beanstalk/