繁体   English   中英

访问路径被拒绝,Asp.net core 2.0 在 Ubuntu 上运行

[英]Access to path is denied, Asp.net core 2.0 running on Ubuntu

我无法使用以下代码行。 在我的开发机器(Windows)上它正在工作。 是的,我正在 Windows 上开发应用程序并在 Ubuntu 上部署。 下一个应用我不会这样做。

我收到错误消息“访问路径 /var/... 已定义”。

try
{
   Directory.CreateDirectory(dirInfo.FullName + "/" + numDirs);
}
catch(Exception e)
{
   return e.Message; // access to the path /var/... is defined
}

我使用 nginx 作为 Kestrel 的代理服务器。 Microsoft 指南中所述

我试图随机触发一些权限命令,因为我远不是 Ubuntu 的专家,但 CreateDirectory 方法仍然产生错误。

我试过的权限命令:

sudo chown -R www-data:www-data /var/www/PROJECTDIR

sudo find /var/PROJECTDIR -type d -exec chmod 770 {} \;
sudo find /var/PROJECTDIR -type f -exec chmod 660 {} \;

我没有在 /var/www 中设置我的项目我使用的是 /var/anotherdir/anotherdir 之类的东西,这是一个问题吗?

实际上,引发异常的是我的 IFormFile 扩展方法。 我尝试发布尽可能少的代码以使问题更紧凑,但我认为这不再是一个好主意,我应该发布 try catch 块,因为它们在我的项目中。 在我的代码中,我有这样的事情。 观察我只是在测试,最后我摆脱了文字和过多的变量引用。

    try
{
   Directory.CreateDirectory(dirInfo.FullName + "/" + numDirs);
   file.SaveAs(dirInfo.FullName + "/" + numDirs) // it was this that threw the exception.
}
catch(Exception e)
{
   return e.Message; // access to the path /var/... is defined
}

那是我犯过的最烦人的错误之一。 幸运的是,我在这篇文章中遇到了一个确切的问题,它解决了我的问题。 我只是通过目录。

不知何故,它在 Windows 上有效,但在 Linux 上却没有。

 public static void SaveAs(this IFormFile formFile, string filePath)
{
    using (var stream = new FileStream( filePath, FileMode.Create))
    {
        formFile.CopyTo(stream);
    }

}

解决方案:

 public static void SaveAs(this IFormFile formFile, string filePath)
    {
        using (var stream = new FileStream( Path.Combine( filePath, formFile.FileName), FileMode.Create))
        {
            formFile.CopyTo(stream);
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM