Как получить веб-приложение для обслуживания статических файлов с другого сервера - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть веб-приложение 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.Файлы, к которым я пытаюсь получить доступ, находятся на другом сервере в той же локальной сети.

В конечном счете, приложению нужно будет читать и писать на этом втором сервере также в других частях кода, так что кто-то будет добрымДостаточно указать мне на пост / учебник, который объясняет, как этого добиться?

1 Ответ

0 голосов
/ 06 февраля 2019

Ваш сервер Ubuntu не понимает пути к общим ресурсам Windows.Просто попробуйте получить доступ к пути, указанному на вашем сервере Ubuntu, и вы увидите проблему.

Чтобы получить к нему доступ, вам необходимо смонтировать общий ресурс на вашем сервере.Вам также придется использовать другой путь для вашей локальной разработки и вашего развертывания.

В Ubuntu это может быть что-то вроде / mnt / srv1 / Drawings (при условии, что вы смонтировали общий ресурс в / mnt / srv1), когда включеныWindows ваш путь остается прежним.

...