2012-11-30 26 views
26

Dosyaları bir Amazon s3 kovasına yüklüyorum ve InputStream ve dosyanın MIME Türünü içeren bir dize, ancak orijinal dosya adına erişemiyorum. Dosyayı S3'e basmadan önce dosya adını ve uzantısını oluşturmak bana kalmış. MIME Türünden kullanılabilecek uygun uzantıyı belirlemek için bir kitaplık veya uygun bir yol var mı?Java'da MIME Türünden uygun dosya uzantısı nasıl belirlenir

Apache Tika kitaplığına bazı başvurular gördüm, ancak bu overkill gibi görünüyor ve henüz dosya uzantılarını başarıyla algılayamadı. Bu kod çalışması gerekir gibi görünüyor toplamak mümkün oldum ama commentors bazı belirttiğimiz gibi benim tipim değişkeni "image/jpeg"

MimeType mimeType = null; 
    try { 
     mimeType = new MimeTypes().forName(type); 
    } catch (MimeTypeException e) { 
     Logger.error("Couldn't Detect Mime Type for type: " + type, e); 
    } 

    if (mimeType != null) { 
     String extension = mimeType.getExtension(); 
     //do something with the extension 
    } 
+1

Dosya uzantısı ayarlamanız gerektiğinden emin misiniz? MIME türünü biliyorsanız, S3'e uygun "İçerik Tipi" ile yükleyebilir ve uzantı (genellikle) alakasız hale gelir. – willglynn

+2

Haklısınız, daha yeni kontrol ettim ve S3 için ObjectMetadata'daki Content-Type özelliğini ayarlamak benim durumumdaki hile yapar. Sorunun cevabını hala bilmek isterdim, gelecekte işe yarayabilir gibi görünüyor. – rphutchinson

+1

Yeterince adil. Dosya uzantıları için MIME türlerinden One True Mapping ™ bulunmuyor - bazı türlerde birden fazla uzantı var, bazı uzantıların birden fazla türü var. Bu nedenle, bağımsız olarak ikna olabilecek bir veri deposu kullandığımda, yalnızca bildiğim şeyi saklamaya çalışıyorum ve tahmin etmekten kaçının. – willglynn

cevap

41

olduğunda ben sadece boş bir dize alıyorum kadarıyla dışarıda, mimetipler ve dosya uzantıları arasında evrensel 1: 1 haritalama yoktur ... Bazı mimetipler birden fazla olası uzantıya sahiptir, birçok uzantı birden fazla mimetip tarafından paylaşılır ve bazı mimetiplerin uzantısı yoktur.

Mümkün olan her yerde mimetipini saklamaktan ve ileriye doğru ilerlemekten ve uzantıyı unutmaktan daha iyi olursunuz.

Verilen bir mime türü için en yaygın dosya uzantısını almak istiyorsanız, Tika gitmek için iyi bir yoldur. Apache Tika, bildiği çok büyük bir mimetip setine sahiptir ve bunların çoğu için, saptama, ortak uzantılar, açıklamalar vb. Için mime sihrini de bilir.

Bir JPEG dosyası için en yaygın uzantıyı almak istiyorsanız this Apache Tika unit test gösterildiği gibi sadece böyle bir şey yapmak gerekir:

MimeTypes allTypes = MimeTypes.getDefaultMimeTypes(); 
    MimeType jpeg = allTypes.forName("image/jpeg"); 
    String jpegExt = jpeg.getExtension(); // .jpg 
    assertEquals(".jpg", jpeg.getExtension()); 

önemli şey tüm mime-türü tanımlarını almak için Tika kavanoza arada sunulan xml dosyasını yüklemeniz gerekir olmasıdır. özel mime-türü ile ilgili olabilecek varsa da o zaman Tika bu destekler ve değişim çizgisi biri olmak: Mimetypes almak için TikaConfig yöntemini kullanarak

TikaConfig config = TikaConfig.getDefaultConfig(); 
    MimeTypes allTypes = config.getMimeRepository(); 

, Tika de özel mimetype tanımlamalarını için sınıf yolunu kontrol edecek ve bunları da dahil et.