У меня есть веб-приложение ASP.Net Core 2 MVC, которое необходимо для получения и обслуживания PDF-файла, который хранится на другом сервере в той же локальной сети.Он знает полный путь.Этот код хорошо работает при разработке на локальной машине (я сократил код до минимума, чтобы добраться до сути):
public IActionResult GetPdf()
{
FileStream fileStream = new FileStream(@"\\SRV1\Drawings\mydrawing.pdf", FileMode.Open, FileAccess.Read);
var fsResult = new FileStreamResult(fileStream, "application/pdf");
return fsResult;
}
Однако, когда я публикую приложение на сервере, где я тестируюПри развертывании я получаю эту ошибку:
System.IO.FileNotFoundException: Could not find file '/var/www/myapp/\\SRV1\Drawings\mydrawing.pdf'
Теперь я понял, что приложение должно обслуживать статические файлы только из своего wwwroot, так что это меня не удивляет.Поэтому, основываясь на этом посте и других подобных постах, я добавил этот код в Startup.cs:
app.UseFileServer(new FileServerOptions
{
FileProvider = new PhysicalFileProvider(@"\\SRV1\Drawings"),
RequestPath = new PathString("/PdfDrawings"),
EnableDirectoryBrowsing = false
});
и изменил действие контроллера следующим образом:
public IActionResult GetPdf()
{
FileStream fileStream = new FileStream(@"\PdfDrawings\mydrawing.pdf", FileMode.Open, FileAccess.Read);
var fsResult = new FileStreamResult(fileStream, "application/pdf");
return fsResult;
}
но таким образом он не работает ни на компьютере разработчика, ни на сервере, так как оба не могут найти путь.Единственное различие между ними заключается в том, что приложение запускается на локальном компьютере и возвращает эту ошибку только тогда, когда я запрашиваю действие GetPdf, поскольку оно будет указывать на C: \
DirectoryNotFoundException: Could not find a part of the path 'C:\PdfDrawings\mydrawing.pdf'.
, а развернутое приложение будетдаже не запускается, потому что похожая ошибка возникает при самом запуске при выполнении метода Configure при запуске.
Я также пробовал это в Startup.cs:
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(@"\\SRV1\Drawings"),
RequestPath = "/PdfDrawings"
});
Я ожидал встретиться с учетными даннымипроблемы, но я никогда не зашел так далеко.Я также знаю, что при таком подходе могут возникнуть проблемы с безопасностью, но приложение будет находиться в локальной сети и будет использоваться только доверенным персоналом, так что это не проблема.
Дополнительная информация, если онаимеет значение: я развертываю приложение на сервере Ubuntu 18.04.Файлы, к которым я пытаюсь получить доступ, находятся на другом сервере в той же локальной сети.
В конечном счете, приложению нужно будет читать и писать на этом втором сервере также в других частях кода, так что кто-то будет добрымДостаточно указать мне на пост / учебник, который объясняет, как этого добиться?