„Konstruieren von ‚Blob‘ fehlgeschlagen: Der angegebene Wert kann nicht in eine Sequenz konvertiert werden“ beim Herunterladen der Datei

Lesezeit: 1 Minute

Ich versuche, eine PDF-Datei mit Ajax/Jquery herunterzuladen und zu speichern (ich weiß …).

Serverseitig habe ich folgendes:

        public HttpResponseMessage GetPdf()
        {
            var pdf = generatePdfByteArray(); // byte[]

            var result = Request.CreateResponse(HttpStatusCode.OK);
            result.Content = new ByteArrayContent(pdf);
            //result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            //{
            //    FileName = "blah.pdf"
            //};
// tried with and without content disposition.. shouldn't matter, i think?
            result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

            return result;
        }

Das ist die Client-Seite:

    let ajaxOptions = {
    url: '/url',
    type: "GET",
    accepts: "application/pdf",
    success: (data) => {
        let blob = new Blob(data, {
            type: "application/pdf"
        }); // <-- this fails

        // stuff...
    }
};
$.ajax(ajaxOptions);

Irgendwelche Ideen, was daran falsch ist?

  • Warum Sie Blob machen möchten, klicken Sie einfach auf den Anker oder die Schaltfläche, die die API aufruft. Der Rest wird vom Browser erledigt

    – Negi Rox

    13. März 2019 um 3:32 Uhr

  • Weil ich den Anruf abfangen und eine Meldung anzeigen möchte, wenn auf dem Server etwas schief geht

    – Thinkhoop

    13. März 2019 um 13:39 Uhr

Der erste Parameter sollte Sequenz sein.

Das wird also nicht funktionieren:

let blob = new Blob(data, {
    type: "application/pdf"
});

Aber das wird:

let blob = new Blob([data], {
    type: "application/pdf"
});

Das ist, was ich am Ende hatte:

public HttpResponseMessage GetPdf()
{
    var pdf = generatePdfByteArray();

    var result = Request.CreateResponse(HttpStatusCode.OK);
    var dataStream = new MemoryStream(pdf);
    result.Content = new StreamContent(dataStream);
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
    {
        FileName = "file.pdf"
    };
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

    return result;
}

1431480cookie-check„Konstruieren von ‚Blob‘ fehlgeschlagen: Der angegebene Wert kann nicht in eine Sequenz konvertiert werden“ beim Herunterladen der Datei

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy