SORU
23 EKİM 2009, Cuma


İçinde uzantıları ve MIME dosya Türlerini .NET

Belirli bir uzantısı (fiziksel dosya erişimi olmayan tercihen) bir MIME İçerik Türü almak istiyorum. Bu konuda bazı sorular gördüm ve yöntemler, bu yeniden olabilir gerçekleştirmek için tarif:

  1. registry information kullanın.
  2. urlmon.dll's FindMimeFromData kullanın.
  3. IIS information kullanın.
  4. Kendi MIME eşleme fonksiyonu rulo. Örneğin this table dayalı.

Hayır kullanıyorum.Bir süredir 1 ama bilgileri kayıt tarafından sağlanan tutarlı değil ve yazılım bağlıdır makinede yüklü olduğunu fark ettim. Bazı uzantıları, gibi .posta İçerik Türü belirtilen kullanmak zorunda değil.

Çözüm yok.2 bana bir şey yavaş olan ilk bayt, okumak için diskteki dosya zorluyor ama iyi sonuçlar alabilir.

Üçüncü yöntem dayanır Dizin Hizmetleri falan olan bir şey yok gibi çünkü ben Ekle COM başvuruları ve emin değilim tutarlı arasında IIS6 ve IIS7. Ayrıca, bu yöntemin performansını bilmiyorum.

Son olarak, kendi masamı kullanmak istemedim ama eğer iyi bir performans ve platformlar arası sonuçları (hatta Mono) tutarlılık istersem sonunda en iyi seçenek gibi görünüyor.

Benim kendi tablo veya diğer açıklanan yöntemlerden birini kullanarak daha iyi daha iyi bir seçenek var mı? Deneyiminiz var mı?

CEVAP
23 EKİM 2009, Cuma


İçin MIME tipi ihtiyacınız ne bağlıdır. Hizmetleri (web Uygulamaları, web servis, vb.) genel olarak, öneririm.

Bu da MS sistemlerinde sürekli MIME türleri koymak için seçtim nedeni olduğunu düşünüyorum.Web.Sınıf (ne yazık ki her ne sebeple olursa olsun iç.) MimeMapping.

Düzenleme:

(&;= Lt .sarıcı NET 3.5)

public static class MimeExtensionHelper
{
    static object locker = new object();
    static object mimeMapping;
    static MethodInfo getMimeMappingMethodInfo;

    static MimeExtensionHelper()
    {
        Type mimeMappingType = Assembly.GetAssembly(typeof(HttpRuntime)).GetType("System.Web.MimeMapping");
        if (mimeMappingType == null)
            throw new SystemException("Couldnt find MimeMapping type");
        ConstructorInfo constructorInfo = mimeMappingType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null);
        if (constructorInfo == null)
            throw new SystemException("Couldnt find default constructor for MimeMapping");
        mimeMapping = constructorInfo.Invoke(null);
        if (mimeMapping == null)
            throw new SystemException("Couldnt find MimeMapping");
        getMimeMappingMethodInfo = mimeMappingType.GetMethod("GetMimeMapping", BindingFlags.Static | BindingFlags.NonPublic);
        if (getMimeMappingMethodInfo == null)
            throw new SystemException("Couldnt find GetMimeMapping method");
        if (getMimeMappingMethodInfo.ReturnType != typeof(string))
            throw new SystemException("GetMimeMapping method has invalid return type");
        if (getMimeMappingMethodInfo.GetParameters().Length != 1 && getMimeMappingMethodInfo.GetParameters()[0].ParameterType != typeof(string))
            throw new SystemException("GetMimeMapping method has invalid parameters");
    }
    public static string GetMimeType(string filename)
    {
        lock (locker)
            return (string)getMimeMappingMethodInfo.Invoke(mimeMapping, new object[] { filename });
    }
}

(.Sarıcı NET 4.0)

public static class MimeExtensionHelper
    {
        static object locker = new object();
        static object mimeMapping;
        static MethodInfo getMimeMappingMethodInfo;

        static MimeExtensionHelper()
        {
            Type mimeMappingType = Assembly.GetAssembly(typeof(HttpRuntime)).GetType("System.Web.MimeMapping");
            if (mimeMappingType == null)
                throw new SystemException("Couldnt find MimeMapping type");            
            getMimeMappingMethodInfo = mimeMappingType.GetMethod("GetMimeMapping", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);
            if (getMimeMappingMethodInfo == null)
                throw new SystemException("Couldnt find GetMimeMapping method");
            if (getMimeMappingMethodInfo.ReturnType != typeof(string))
                throw new SystemException("GetMimeMapping method has invalid return type");
            if (getMimeMappingMethodInfo.GetParameters().Length != 1 && getMimeMappingMethodInfo.GetParameters()[0].ParameterType != typeof(string))
                throw new SystemException("GetMimeMapping method has invalid parameters");
        }
        public static string GetMimeType(string filename)
        {
            lock (locker)
                return (string)getMimeMappingMethodInfo.Invoke(mimeMapping, new object[] { filename });
        }
    }

.NET 4.5

Hayır sarıcı gerektiren, kamu yöntemi System.Web.MimeMapping.GetMimeMapping doğrudan çağrı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • Baby Big Mouth

    Baby Big Mou

    5 Mart 2013
  • xXGAMERrs_Xx

    xXGAMERrs_Xx

    31 Temmuz 2014