在AWS Elastic Beanstalk .net核心应用程序中访问wwwroot文件夹

时间:2018-08-26 17:53:48

标签: amazon-web-services .net-core elastic-beanstalk

在过去的几天里,我一直在努力寻找为EB .net核心项目存储图像的最佳方法。最初开发它时,我只是将图像存储在wwwroot/images/{whatever I needed}目录中。但是,在部署后不久,我发现该项目无权写入(并且可能尚未知道该文件夹)。

我收到的具体错误消息是"Access to the path 'C:\\inetpub\\AspNetCoreWebApps\\app\\wwwroot\\images' is denied

我曾尝试集成AWS的EFS,但我似乎也无法弄清楚。我添加了AWS EB EFS文档中提到的storage-efs-mountfilesystem.config文件,但无济于事。我不仅无法访问任何名为/efs的文件夹,甚至都不知道这是正确的路径。

关于我看到的唯一可用选项是将所有图像作为blob存储在数据库中,我真的希望避免。

我已经尝试使用此答案here来访问wwwroot文件夹,但是我得到的响应似乎没有任何变化。

我已签订合同,因此需要尽快开始工作,而不是稍后。如果必须的话,我会走数据库路由,但这不是一个长期的选择。尽管它是一个小型应用程序,但在可预见的将来,将只有一个活跃用户。

下面是用于文件上传的代码:

[Route("Image"), HttpPost()]
    public async Task<ResponseInfo> SaveImage()
    {
        try
        {
            var file = Request.Form.Files.FirstOrDefault();
            if (file != null && file.Length > 0)
            {
                if (file.Length > _MaxFileSize)
                {
                    return ResponseInfo.Error($"File too large. Max file size is { _MaxFileSize / (1024 * 1024) }MB");
                }
                var extension = Path.GetExtension(file.FileName).ToLower();
                if (extension == ".png" || extension == ".jpg" || extension == ".jpeg" || extension == ".gif")
                {
                    var filename = String.Concat(DateTime.UtcNow.ToString("yyyy-dd-M--HH-mm-ss"), extension);
                    var basePath = Path.Combine(_Env.WebRootPath, "images", "tmp");
                    if (Directory.Exists(basePath) == false)
                    {
                        Directory.CreateDirectory(basePath);
                    }
                    using (var inputStream = new FileStream(Path.Combine(basePath, filename), FileMode.Create))
                    {
                        try
                        {
                            await file.CopyToAsync(inputStream);
                            return ResponseInfo.Success(filename);
                        }
                        catch (Exception ex)
                        {
                            ex.Log();
                            return ResponseInfo.Error("Failed to save image");
                        }
                    }
                }
                else
                {
                    return ResponseInfo.Error($"File type not accepted. Only PNG, JPG/JPEG, and gif are allowed");
                }
            }
        }
        catch (Exception ex) {
            return ResponseInfo.Error(ex.Message);
        }
        return ResponseInfo.Error("No files received.");
    }

如果有关系,我正在运行最新的VS 2017社区。使用AWS Toolkit for Visual Studio 2017 V1.14.4.1发布到AWS。

0 个答案:

没有答案