2009-07-28 8 views

Antwort

4

Sie den MIME-Typ speichern kann, wenn die Datei hochgeladen und senden, dass, wenn die Datei angefordert wird .

+0

Guter Punkt. Bitte schauen Sie noch einmal, ich habe ein paar Zeilen zu meiner Frage hinzugefügt. – Shimmy

4

Umm ... warum? Du wirst nicht Inhalte aller möglichen Typen zurückgeben, oder?

Hier ist eine Liste von gemeinsamen Typen: http://www.webmaster-toolkit.com/mime-types.shtml. Es gibt keine Liste, die "ALL" -Typen einschließen würde, weil jeder Anwendungshersteller einen benutzerdefinierten erstellen und ihn mit einer benutzerdefinierten Erweiterung verknüpfen kann.

+0

Ja, ich bin. Ich werde alle möglichen Arten zurückgeben. Ich muss Benutzern erlauben, Dateien von jedem Typ hochzuladen und herunterzuladen – Shimmy

+1

Wie gesagt, es gibt keine "Mime" -Typen. Am besten ist es, wenn Sie eine Liste der gebräuchlichsten erhalten (und Sie können "allgemein" hier so weit oder so schmal behandeln, wie Sie wollen) und alles andere als binär zurückgeben ("application/octet-stream"). – ChssPly76

+0

Ich meinte nicht ALLES ALLES, ich meinte die gelisteten üblichen – Shimmy

2

Es hängt von Ihrer Plattform ab. Hier ist eine für C# und IIS: http://blog.crowe.co.nz/archive/2006/06/02/647.aspx

In Powershell ist es ein Einzeiler: (. Fileupload PostedFile.ContentType)

([adsi]"IIS://localhost/MimeMap").MimeMap 
+0

Das ist eigentlich etwas, das ich suche (die Asp one), dachte der Link funktioniert nicht. – Shimmy

+0

Der Link funktioniert für mich, ich werde den Code hinzufügen, der darin ist, wenn es das ist, was Sie wollen, bitte markieren Richards Antwort als die richtige – Colin

2

Der Code im Link von Richard posted:

// Maintain a sorted list to contain the MIME Types 
SortedList sl = new SortedList(); 
Console.WriteLine("IIS Mime Map - c#"); 
Console.WriteLine(); 
// Serve to connect to... 
string ServerName = "LocalHost"; 
// Define the path to the metabase 
string MetabasePath = "IIS://" + ServerName + "/MimeMap"; 
// Note: This could also be something like 
// string MetabasePath = "IIS://" + ServerName + "/w3svc/1/root"; 
try 
{ 
    // Talk to the IIS Metabase to read the MimeMap Metabase key 
    DirectoryEntry MimeMap = new DirectoryEntry(MetabasePath); 
    // Get the Mime Types as a collection 
    PropertyValueCollection pvc = MimeMap.Properties["MimeMap"]; 
    // Add each Mime Type so we can display it sorted later 
    foreach (object Value in pvc) 
    { 
    // Convert to an IISOle.MimeMap - Requires a connection to IISOle 
    // IISOle can be added to the references section in VS.NET by selecting 
    // Add Reference, selecting the COM Tab, and then finding the 
    // Active DS Namespace provider 
    IISOle.MimeMap mimetypeObj = (IISOle.MimeMap)Value; 
    // Add the mime extension and type to our sorted list. 
    sl.Add(mimetypeObj.Extension, mimetypeObj.MimeType); 
    } 
    // Render the sorted MIME entries 
    if (sl.Count == 0) 
    Console.WriteLine("No MimeMap entries are defined at {0}!", MetabasePath); 
    else 
    foreach (string Key in sl.Keys) 
     Console.WriteLine("{0} : {1}", Key.PadRight(20), sl[Key]); 
} 
catch (Exception ex) 
{ 
    if ("HRESULT 0x80005006" == ex.Message) 
    Console.WriteLine(" Property MimeMap does not exist at {0}", MetabasePath); 
    else 
    Console.WriteLine("An exception has occurred: \n{0}", ex.Message); 
} 
1

// zu einem IISOle.MimeMap konvertieren - Erfordert eine Verbindung zu IISOle
// IISOle kann auf den Referenzabschnitt in VS.NET hinzugefügt werden indem Sie
// Verweis hinzufügen, den COM-Tab auswählen und dann die
// Active DS-Namespace-Anbieter

nach meinen googeln zu finden: (verlor die Links, sorry)

Der "Active DS IIS-Namespace-Provider" ist Teil der IIS-Installation.
Nachdem Sie IIS installiert haben, sehen Sie dies in der Liste der Optionen.
Wenn Sie nicht sehen, sollte es unter C: \ windows \ system32 \ inetsrv \ adsiss.dll gefunden werden.

Um IIS zu installieren: klicken Sie auf Start, Einstellungen, Systemsteuerung, Software hinzufügen oder entfernen, Windows-Komponenten hinzufügen oder entfernen, wählen Sie Internet Information Services (IIS).

Der meiste Code Ich habe eine Kombination von diesen gesehen verwendet:

using System.IO; mithilfe von System.DirectoryServices; // Klicken Sie mit der rechten Maustaste auf Referenzen, und fügen Sie es aus .NET mit System.Reflection; mithilfe von System.Runtime.InteropServices; mit System.Collections; mit IISOle; mit System.Collections.Specialized;

Der Active DS-Namespace befindet sich beim Hinzufügen der Referenz möglicherweise unter der Registerkarte COM.

1

Ich habe eine kleine Klasse basierend auf der Webmaster-Toolkit.com-Liste geschrieben. Dies vermeidet die Verwendung von COM und der IIS-Route oder von IIS-Referenzen.

Es verwendet eine XML-serialisierte Liste, die etwa 400 MIME-Typen enthält, ist also normalerweise mehr als genug, wenn Sie wirklich obskure MIME-Typen haben. In diesem Fall können Sie einfach zur XML-Datei hinzufügen.

Die vollständige Lösung can be found here. Hier ist ein Beispiel:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var list = MimeType.Load(); 
     MimeType mimetype = list.FirstOrDefault(m => m.Extension == "jpg"); 
    } 
} 
Verwandte Themen