Zwracanie pliku PDF w ASP NET Core

0

Witam.
Mam problem z aplikacją, którą niepotrzenie ruszyłem. Była pisana w NET Core 1.0 lub 1.1 beta i teraz jak ją "dotknąłem" to musiałem zrobić 2.2 i się posypało pare rzeczy.
Próbuje "wydukować" plik pdf. Chrome przeważnie wyświetla pdf i u mnie jest to samo ale...
Plik na serwerze znajduje się w ścieżce:

C:/inetpub/MojaStrona/wwwroot/raport633223633920190205113245156.pdf

Próbowałem


                Uri uri = new Uri(ServerResult);
                string resultFilePath = uri.AbsoluteUri;
                byte[] reportBytes = Encoding.UTF8.GetBytes(resultFilePath);

                return File(reportBytes, "application/pdf");

Albo

                Uri uri = new Uri(ServerResult);
                string resultFilePath = uri.AbsoluteUri;
                byte[] reportBytes = Encoding.UTF8.GetBytes(resultFilePath);

                fs = new FileStream(resultFilePath, FileMode.Open);

                return File(fs, "application/pdf");

Pierwszy przypadek zwraca pustego pdfa - błąd w chrome, że nie można otworzyć pliku. Drugi przypadek rzuca błedem :

InvalidOperationException: Invalid non-ASCII or control character in header: 0x0142

Domyślam, że obiekt FileStream nie potrafi otworzyć pliku. Co z tym zrobić. Potrzebne na CITO

0

sprawdz najpierw czy ten stream zawiera cokolwiek i czy jest ok. Otworz plik (stream) i zapisz go tam gdzie masz dostep i zobacz czy jest to samo

IMO podajesz zla sciezke / nie masz dostepu do pliku

jezeli wszystko jest ok to zobacz to

return new FileStreamResult(stream, "application/pdf");  
0

No właśnie wiem, że nie zawiera, ale nie wiem dlaczego. Jeśli zrobie :

return File(fs, "application/pdf", "wydruk_raportu.pdf");

To plik ma 1kb i nie da się go wyświetlić

0

Ja u siebie na 2.2 mam coś takiego, żeby zwrócić zipa:

                string temporaryZIPDirectory = _hostingEnvironment.ContentRootPath + "/Temp/ZIP/";
                string temporaryZIPFile = "Billingi - " + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".zip";

                return PhysicalFile(temporaryZIPDirectory + temporaryZIPFile, "application/zip", temporaryZIPFile);

https://github.com/bartekkois/Adescom-CTM-Billings/blob/f3fd80a1f9ea3af94e503ec1d03c077bb1d01d24/Adescom%20CTM%20Billings/Pages/Index.cshtml.cs#L67

0

Niestety

IOException: Nazwa pliku, nazwa katalogu lub składnia etykiety woluminu jest niepoprawna : 'C:\inetpub\MojaStrona\wwwroot\raport633223633920190205172117353.pdf

W załączniku poprawnie wygenerowany plik, którego nie potrafie wyświetlić na www.

ServerResult = "raport633223633920190205172117353.pdf" // dopisuje tutaj statycznie co zwraca ta zmienna, żeby nie było
string resultFilePath = _hostingEnvironment.ContentRootPath + @"\wwwroot\" + ServerResult;
return PhysicalFile(resultFilePath, "application/pdf");
0

Ja bym jeszcze podejrzał na co wskazuje zainicjowany resultFilePath oraz spróbował pobrać jakiś przykładowy plik a.pdf przerobiony z jakiegoś innego pdfa.

0

Dokładnie wskazuję na to co pokazuje w treści błędu. Zauważyłem że ja mam ukośniki nie w tą stronę, ale tak się generuje, nie wiem co mam dalej zrobić.
Inna nazwa pliku, inny plik - to samo

0

Okazało się, że na końcu nazwy pliku pdf miałem jakieś znaki puste, między innymi nowej lini, co dla http jest non-ascii coś tam, coś tam, niekompatybilne... Trzeba się napić w weekend, dzięki za zainteresowanie głupotą ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1