【发布时间】:2020-11-27 16:36:52
【问题描述】:
当我通过dotnet run 进入.sln 目录后启动项目时,此功能正常工作。如果我转到projectfolder/../bin/Release/netcoreapp3.1/publish 并使用dotnet project.dll 运行它仍然可以正常工作,但是如果我将此应用程序作为服务启动,则此功能不起作用并且catch 写下这一行:
拒绝访问路径“/home/.../projectfolder/uploaded-images/3713579a-5b47-48f7-8666-9e0b3ded3bb1.jpg”。`
private async Task<FileSaveResult> SaveImage(IFormFile imageFile)
{
if (!Directory.Exists(IMAGEUPLOADPATH))
{
Directory.CreateDirectory(IMAGEUPLOADPATH);
}
string postedFileExtension = Path.GetExtension(imageFile.FileName);
string newName = Guid.NewGuid().ToString() + postedFileExtension;
string newPath = Path.Combine(IMAGEUPLOADPATH, newName);
try
{
using var fileStream = new FileStream(newPath, FileMode.Create);
await imageFile.CopyToAsync(fileStream);
return new FileSaveResult
{
ContentType = imageFile.ContentType,
PhysicalAddress = newPath,
IsSuccess = true
};
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return new FileSaveResult();
}
}
这是我初始化IMAGEUPLOADPATH的地方
public AdminController(..., IWebHostEnvironment environment,...)
{
...
VIDEOUPLOADPATH = Path.Combine(environment.ContentRootPath, "uploaded-videos");
IMAGEUPLOADPATH = Path.Combine(environment.ContentRootPath, "uploaded-images");
...
}
我用这个命令启动服务
sudo systemctl start myprojectname.service
这是myprojectname.service文件的内容(我一般不知道这些行的含义)。
[Unit]
Description=.....
[Service]
WorkingDirectory=/home/..../myproject
ExecStart=/usr/bin/dotnet /home/.../myproject/bin/Release/netcoreapp3.1/publish/project.dll
Restart=always
RestartSec=10
ProtectHome=off
KillSignal=SIGINT
SyslogIdentifier=myproject
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WntedBy=multi-user.target
我该如何解决这个问题?我通过 ssh 连接开始这个项目。我无法关闭命令行,因为它会杀死应用程序。
【问题讨论】:
标签: ubuntu path asp.net-core-mvc systemctl