2017-09-28 6 views
1

Ich habe ein ASP.NET MVC 5-Projekt, in dem ich versuche, ein PDF herunterladen. Ich dachte, das wäre ziemlich einfach, aber anscheinend nicht so, da das PDF irgendwie falsch formatiert wird, wenn es an den Browser gesendet wird. Chrome liest die PDF-Datei, aber alle Sonderzeichen und Bilder sind beschädigt, und Edge möchte sie nicht öffnen.PDF beschädigt in HttpResponseMessage

Die PDF-Datei ist auf Dänisch geschrieben, enthält also Buchstaben wie "æ", "ø" und "å" und enthält auch verschiedene Bilder.

Ich habe meinen Code aktuellen Code vereinfacht, aber das Problem ist immer noch das gleiche:

[HttpGet] 
public HttpResponseMessage DownloadDocument() 
{ 
    try 
    { 
     var localFilePath = "C:\\*somepath*\\Testpdf.pdf"; 
     var fileStream = new FileStream(localFilePath, FileMode.Open, FileAccess.Read); 
     fileStream.Seek(0, SeekOrigin.Begin); 
     HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); 
     response.Content = new StreamContent(fileStream); 
     response.Content.Headers.Add("Content-Disposition", "inline;filename=\"Testpdf.pdf\""); 
     response.Content.Headers.Add("Content-Length", fileStream.Length.ToString()); 
     response.Content.Headers.Add("Content-Name", "Testpdf.PDF"); 
     response.Content.Headers.Add("Content-Type", "application/pdf;charset=UTF-8"); 
     return response; 
    } 
    catch (Exception e) 
    { 
     throw e; 
    } 
} 

Es liest ein pdf von der Platte und weist den Filestream auf den Inhalt des HttpResponseMessage. Im Beispiel verwende ich einen StreamContent, aber das Ergebnis ist immer noch dasselbe, wenn ich zu ByteArrayContent wechsle.

Ich habe auch versucht, die Datei wieder auf die Festplatte schreiben, ohne Probleme überhaupt. Ich habe im Großen und Ganzen dasselbe Verhalten in einem dotnetcore 2.0-Webprojekt gemacht, ohne irgendwelche Probleme, was zu der Annahme führt, dass die Formatierer der Web-API den Inhalt falsch analysieren.

Ich bin bei meinem Ende hier, also würde jeder Eingang sehr geschätzt werden.

+0

Warum legen Sie den Inhaltstyp auf 'application/pdf; charset = UTF-8'? Sind Sie sicher, dass der Zeichensatz in der PDF verwendet wird? – CodeCaster

+0

Ich habe diese Zeile verwendet, um es zu überprüfen: var e = new StreamReader (fileStream) .CurrentEncoding; , die "Unicode (UTF-8)" gibt. Nur das Schreiben von application/pdf liefert das gleiche Ergebnis. – Icerear

Antwort

Verwandte Themen