2017-10-23 7 views
0

Ich entwickle eine Funktion in ASP.NET, um eine PDF-Datei von byte[] herunterladen.Herunterladen von beschädigten PDF-Datei

So verwenden wir Winnovative.PdfConverter.GetPdfBytesFromHtmlString Funktion, um die PDF-Bytes zu erhalten. Im unteren Code ist die Variable data eine byte[], die von
Winnovative.PdfConverter.GetPdfBytesFromHtmlString zurückgegeben wird.

Daher hat die data Variable alrady die Bytes, die in der PDF-Datei geschrieben werden müssen.

HINWEIS: Wenn ich File.WriteAllBytes("a path", data) mache, wird eine PDF-Datei erstellt und kann gelesen werden und ist nicht beschädigt.

Der Grund, warum ich HttpResponse verwenden möchte, ist, weil ich möchte, dass die Datei heruntergeladen wird, weil das ist, was der Client will.

Kurz gesagt, ich möchte den Code unten geschrieben, um die byte[] data Variable zu nehmen, schreiben Sie es in eine PDF-Datei und laden Sie es herunter.

Es folgt der Code:

HttpResponse response = HttpContext.Current.Response; 
response.Clear(); 
response.ClearContent(); 
response.ClearHeaders(); 
response.Cache.SetCacheability(HttpCacheability.Private); 
response.CacheControl = "private"; 
response.AddHeader("Content-Type", "binary/octet-stream"); 
response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"; size=" + (object)data.Length); 
response.AddHeader("Content-Length", data.Length.ToString((IFormatProvider)CultureInfo.InvariantCulture)); 
response.Flush(); 
response.BinaryWrite(data); 
response.Flush(); 
response.End(); 

Wenn ich die Web-App laufen der Download erfolgt glatt, aber die Datei nicht, wenn sie geöffnet zu laden.

+1

Das sollte 'application/octet-Stream' – SLaks

+0

@SLaks für die Antwort danken Ihnen, aber die Datei heruntergeladen werden noch beschädigt. Obwohl, jetzt kann ich Fehlermeldung sehen: 'Fehler: Datei öffnen. 0x80410108 - E - Der Dateiende-Marker wurde nicht gefunden. 0x8041010A - E - Das Schlüsselwort 'startxref' oder die XRef-Position wurde nicht gefunden. Recover XREF-Tabelle. 0x80410306 - E - Die "Length" -Taste des Stream-Objekts ist falsch. - Objekt Nr .: 20 0x80410307 - E - Das Schlüsselwort "endstream" fehlt. - Objekt Nr .: 20' – austin

+1

Wie groß ist die heruntergeladene Datei? Null? –

Antwort

-3

Ich empfehle die Verwendung der FileContentResult class anstatt das Antwortobjekt direkt in Ihrem Controller zu manipulieren. Der folgende Code wird in einer ASP.NET-Controller oder ApiController arbeiten:

public FileContentResult Get() 
{ 
    byte[] data = new YourPdfService().GeneratePdf(); 
    return new FileContentResult(data, "application/pdf"); 
} 
+0

Woher wissen Sie, dass es einen Controller gibt? Warum gehen Sie davon aus, dass dies MVC und nicht Web Forms ist? – mason

+0

@ Mason OP nicht angeben und basierend auf Marktanteil ist es sicherer, MVC als Webforms anzunehmen - https://developer.telerik.com/topics/net/asp-net-intersections-developers-share-2017-platform-choice/ – tawman

+1

Unsere Antworten basieren nicht auf "Was ist die derzeit populäre Technologie", sondern "Welche Technologie wird gefragt?". Wenn Sie sich nicht sicher sind, sollten Sie einen Kommentar hinterlassen, in dem Sie um Klärung bitten, anstatt eine Antwort zu geben, die möglicherweise nicht relevant ist. Und diese Umfrage und ihre Schlussfolgerungen sehen absolut albern aus. – mason

Verwandte Themen