2013-02-08 3 views
6

वेरिएबल content_type = "application/pdf" को देखते हुए इसमें कोई अन्य माइम प्रकार भी शामिल हो सकता है।किसी दिए गए सामग्री प्रकार के लिए डिफ़ॉल्ट एक्सटेंशन कैसे प्राप्त करें?

मैं सामग्री प्रकार के लिए डिफ़ॉल्ट एक्सटेंशन कैसे प्राप्त कर सकता हूं?

मेरे पास वर्तमान में दो समाधान हैं, जो बहुत जटिल "प्रतीत होते हैं"।

हैक स्ट्रिंग

content_type.split("/")[1] 

उपयोग माइम :: प्रकार

require 'mime/types' 
    MIME::Types[content_type].first.extensions.first 

वहाँ एक बेहतर समाधान है?

+0

अपने दूसरे समाधान का उपयोग किया, एक आकर्षण की तरह काम किया। वैसे, रेल ऐप में मुझे माइम/प्रकार की आवश्यकता नहीं थी। –

उत्तर

3

माइम प्रकार के साथ आपका दूसरा समाधान समाधान है, जिसे आपको चुनना चाहिए। वहाँ उस के लिए कई कारण हैं:

  • दूसरा समाधान वास्तव में आपके उपयोग के मामले के लिए डिज़ाइन किया गया है
  • Hack the string असंगत हो या वापसी अप्रत्याशित परिणाम (! लगता है application/postscript के बारे में विस्तार eps है)
  • कृपया विचार कर सकते हैं, कि हम शायद यह नहीं कह सकते कि हर माइम प्रकार का डिफ़ॉल्ट विस्तार होता है। उदाहरण के लिए: jpg (या jpeg या JPG ..) छवियों के लिए डिफ़ॉल्ट एक्सटेंशन को किसने परिभाषित किया है?
8

आपको रूबी की Hash.invert विधि का उपयोग करने की आवश्यकता है।

This answer से पता चलता है कि यह कैसे करना है:

Rack::Mime इस क्षमता है (और रैक रेल की निर्भरता है):

require 'rack/mime' 
Rack::Mime::MIME_TYPES.invert['image/jpeg'] #=> ".jpg" 

आप उल्टे हैश memoize करने के लिए आप कर रहे हैं चाहते हो सकता है अक्सर लुकअप करने जा रहा है, क्योंकि यह एक सस्ता ऑपरेशन नहीं है।

आपके टैग से, ऐसा लगता है कि आप रेल का उपयोग कर रहे हैं।

संबंधित मुद्दे