Zapis pliku przez przeglądarkę po wywołaniu żądania ajaxem

Odpowiedz Nowy wątek
2018-12-30 17:48
0

Wywołuję ajaxem pobranie pliku z backendu w wyniku czego otrzymuję byte[], a przynajmniej tak mi się wydaje.
Następnie próbuję zapisać tę tablicę jako plik .pdf i tu pojawia się problem, ponieważ do pliku zapisywany jest zawartość tablicy a nie tworzy się poprawny pdf.
Moje pytanie: jak w js spowodować, żeby utworzył się i ściągnął poprawny plik?

ajax + js:

$("#fileGet").click(function () {

            var _url = '/Home/Get';
            var documentId = $("#docId").val();

            $.ajax({
                url: _url,
                crossDomain: true,
                type: "POST",
                async: true,
                contentType: "application/json; charset=utf-8",
                data: { documentId: documentId },
                success: function (result) {
                    **saveByteArray("sample.pdf", result.documentBody)**
                },
                error: function (xhr, status, error) {
                    alert('Nie udało się pobrać pliku.');
                }
            });
        })

        function saveByteArray(fileName, byte) {
            var blob = new Blob([byte], { type: "application/pdf" });
            var link = document.createElement('a');
            link.href = window.URL.createObjectURL(blob);
            link.download = fileName;
            link.click();
        };

Zarówno result.documentBody jak i zawartość ściągniętego w ten sposób pliku to ciąg znaków zaczynający się od : "JVBERi0xLjMNJeLjz9MNCjI4IDAgb2JqDTw8IA0vTGluZWFyaXplZCAxIA0vTyAzMiANL0ggW..."

Przed przesłaniem do frontendu odpowiedzi sprawdziłem jeszcze w backendzie i plik tworzy się poprawnie przy pomocy :

File.WriteAllBytes(@"C:\0\Foo.pdf", result.documentBody);

Pozostało 580 znaków

2018-12-30 19:35
0

Zmieniłem JSONResult na FileResult w controlerze i teraz plik tworzy się niemal poprawnie (porównując wizualnie różni się kilkoma znakami), jednak coś jest nie tak z kodowaniem.
Orginalny .pdf ma kodowanie ANSI, a po ściągnięciu z przeglądarki ma kodowanie UTF-8 (przynajmniej wg Notepad++)
Czy jest na to jakaś rada, żeby zapisać pdf jako ANSI?
Po modyfikacji metoda zapisująca plik przez przeglądarkę wygląda tak:

function saveByteArray(fileName, byte) {
            var blob = new Blob([byte], { type: "octet/stream;charset=ANSI" });
            var link = document.createElement('a');
            link.href = window.URL.createObjectURL(blob);
            link.download = fileName;
            link.click();
        };
edytowany 1x, ostatnio: endrique, 2018-12-30 19:37

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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