Доступ к пути запрещен, Asp.net core 2.0 работает в 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, это проблема?
1 ответ
Фактически, то, что было исключением, было моим методом расширения 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);
}
}