c# - Anzeigen von Anzeigeninhalten aus Respose.WriteFile () / Response.ContentType

Translate

Wie würde man Inhalte von einer "dynamischen" Aspx-Seite hinzufügen? Derzeit arbeite ich daran, die System.Web.HttpResponse "Page.Response" zu verwenden, um eine auf einem Webserver gespeicherte Datei in eine Webanforderung zu schreiben.

Dies würde es Leuten ermöglichen, eine URL für den Typ zu treffenhttp://www.foo.com?Image=test.jpgund haben die Bildanzeige in ihrem Browser. Wie Sie vielleicht wissen, dreht sich dies um die Verwendung von Response.ContentType.

Durch die Nutzung

Response.ContentType = "application/octet-stream";

Ich bin in der Lage, Bilder vom Typ gif / jpeg / png anzuzeigen (alles, was ich bisher getestet habe). Wenn ich versuche, .swf- oder .ico-Dateien anzuzeigen, gibt es einen netten kleinen Fehler.

mit

Response.ContentType = "application/x-shockwave-flash";

Ich kann Flash-Dateien abspielen lassen, aber dann sind die Bilder durcheinander.

Also, wie geht es mir?leichtInhaltstyp auswählen?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Das ist hässlich, aber der beste Weg ist, sich die Datei anzusehen und den Inhaltstyp entsprechend festzulegen:

switch ( fileExtension )
{
    case "pdf": Response.ContentType = "application/pdf"; break; 
    case "swf": Response.ContentType = "application/x-shockwave-flash"; break; 

    case "gif": Response.ContentType = "image/gif"; break; 
    case "jpeg": Response.ContentType = "image/jpg"; break; 
    case "jpg": Response.ContentType = "image/jpg"; break; 
    case "png": Response.ContentType = "image/png"; break; 

    case "mp4": Response.ContentType = "video/mp4"; break; 
    case "mpeg": Response.ContentType = "video/mpeg"; break; 
    case "mov": Response.ContentType = "video/quicktime"; break; 
    case "wmv":
    case "avi": Response.ContentType = "video/x-ms-wmv"; break; 

    //and so on          

    default: Response.ContentType = "application/octet-stream"; break; 
}
Quelle
Translate

Dies ist Teil einer Lösung, die ich in einem lokalen Intranet verwende. Einige der Variablen müssen Sie selbst sammeln, wenn ich sie aus einer Datenbank ziehe, aber Sie können sie von einer anderen Stelle abrufen.

Das einzige Extra, aber ich bin da drin, ist eine Funktion namensgetMimeTypeHiermit wird eine Verbindung zur Datenbank hergestellt und der richtige Minentyp basierend auf der Dateierweiterung zurückgezogen. Dies ist standardmäßig application / octet-stream, wenn keiner gefunden wird.

// Clear the response buffer incase there is anything already in it.
Response.Clear();
Response.Buffer = true;

// Read the original file from disk
FileStream myFileStream = new FileStream(sPath, FileMode.Open);
long FileSize = myFileStream.Length;
byte[] Buffer = new byte[(int)FileSize];
myFileStream.Read(Buffer, 0, (int)FileSize);
myFileStream.Close();

// Tell the browse stuff about the file
Response.AddHeader("Content-Length", FileSize.ToString());
Response.AddHeader("Content-Disposition", "inline; filename=" + sFilename.Replace(" ","_"));
Response.ContentType = getMimeType(sExtention, oConnection);

// Send the data to the browser
Response.BinaryWrite(Buffer);
Response.End();
Quelle
Translate

JepKeithhässlich aber wahr. Am Ende habe ich die MIME-Typen, die wir verwenden würden, in eine Datenbank gestellt und sie dann herausgezogen, als ich eine Datei veröffentlichte. Ich kann immer noch nicht glauben, dass es keine autoritive Liste von Typen gibt oder dass nicht erwähnt wird, was in MSDN verfügbar ist.

ich fanddieseWebsite, die etwas Hilfe lieferte.

Quelle
Translate

Seit .Net 4.5 kann man verwenden

MimeMapping.GetMimeMapping

Es gibt die MIME-Zuordnung für den angegebenen Dateinamen zurück.

https://msdn.microsoft.com/en-us/library/system.web.mimemapping.getmimemapping(v=vs.110).aspx

Quelle