Ruby on Rails 5.2 - ActiveStorage::Variant

वर्ग ActiveStorage :: भिन्न




ruby

वर्ग ActiveStorage :: भिन्न

जनक:
Object
शामिल मॉड्यूल:
ActiveStorage::Downloading

छवि ब्लॉब्स में ऐसे भिन्न रूप हो सकते हैं जो मूल पर लागू परिवर्तनों के एक सेट का परिणाम हैं। इन वेरिएंट का उपयोग मूल रूप से थंबनेल, निश्चित-आकार के अवतार, या किसी अन्य व्युत्पन्न छवि को बनाने के लिए किया जाता है।

वेरिएंट फ़ाइल के वास्तविक परिवर्तनों के लिए MiniMagick पर भरोसा करते हैं, इसलिए यदि आप वेरिएंट का उपयोग करना चाहते हैं, तो आपको अपने gem "mini_magick" जोड़ना होगा।

ध्यान दें कि एक वैरिएंट बनाने के लिए सेवा से पूरी बूँद फ़ाइल डाउनलोड करना और इसे मेमोरी में लोड करना आवश्यक है। जितनी बड़ी छवि होती है, उतनी अधिक मेमोरी का उपयोग किया जाता है। इस प्रक्रिया के कारण, आप इस बारे में भी विचार करना चाहते हैं कि वास्तव में वेरिएंट कब संसाधित होता है। उदाहरण के लिए, आपको किसी टेम्पलेट में वेरिएंट इनलाइन को संसाधित नहीं करना चाहिए। सक्रिय मांग पर नियंत्रक की प्रसंस्करण में विलंब करें, जैसे कि ActiveStorage::RepresentationsController में उपलब्ध कराया गया है ActiveStorage::RepresentationsController

ऐसे विलंबित ऑन-डिमांड वेरिएंट को संदर्भित करने के लिए, बस एक्टिव स्टोरेज द्वारा प्रदान किए गए हल किए गए मार्ग के माध्यम से वेरिएंट से लिंक करें:

<%= image_tag Current.user.avatar.variant(resize: "100x100") %>

यह उस विशिष्ट संस्करण के साथ उस विशिष्ट ब्लॉब के लिए एक URL बनाएगा, जिसे ActiveStorage::RepresentationsController तो ActiveStorage::RepresentationsController मांग का उत्पादन कर सकता है।

जब आप वास्तव में आवश्यक संस्करण का उत्पादन करना चाहते हैं, तो processed कॉल करें। यह जाँच करेगा कि संस्करण पहले ही संसाधित हो चुका है और सेवा में अपलोड किया गया है, और यदि ऐसा है, तो बस उसे वापस कर दें। अन्यथा यह परिवर्तनों का प्रदर्शन करेगा, सेवा में संस्करण अपलोड करेगा, और फिर से अपने आप को लौटाएगा। उदाहरण:

avatar.variant(resize: "100x100").processed.service_url

यह अवतार ब्लॉब के एक प्रकार को बनाएगा और संसाधित करेगा जो 100 की ऊंचाई और चौड़ाई के लिए विवश है। फिर यह बूँद के रूपांतर और परिवर्तनों के अनुसार सेवा में वेरिएंट को अपलोड करेगा।

सभी संभावित परिवर्तनों की एक सूची www.imagemagick.org/script/mogrify.php पर उपलब्ध है। आप स्वतंत्र रूप से जितने चाहें जोड़ सकते हैं:

avatar.variant(resize: "100x100", monochrome: true, rotate: "-90")

स्थिरांक

WEB_IMAGE_CONTENT_TYPES

गुण

बूँद [आर]
भिन्नता [R]

पब्लिक क्लास के तरीके

नया (बूँद, विभिन्नता_ओर_करण_की) स्रोत दिखाएँ
# File activestorage/app/models/active_storage/variant.rb, line 47
def initialize(blob, variation_or_variation_key)
  @blob, @variation = blob, ActiveStorage::Variation.wrap(variation_or_variation_key)
end

सार्वजनिक प्रवृत्ति के तरीके

# File activestorage/app/models/active_storage/variant.rb, line 75
def image
  self
end

प्राप्त संस्करण को लौटाता है। ActiveStorage::Variant अनुमति देता है ActiveStorage::Variant और ActiveStorage::Preview उदाहरणों का उपयोग किया जा सकता है।

# File activestorage/app/models/active_storage/variant.rb, line 58
def key
  "variants/#{blob.key}/#{Digest::SHA256.hexdigest(variation.key)}"
end

बूँद और संयोजन की एक संयोजन कुंजी देता है जो एक विशिष्ट संस्करण की पहचान करता है।

संसाधित () स्रोत दिखाएं
# File activestorage/app/models/active_storage/variant.rb, line 52
def processed
  process unless processed?
  self
end

इस प्रक्रिया के होने के बाद या सेवा पर एक मौजूदा प्रसंस्करण पाए जाने के बाद ही संस्करण उदाहरण लौटाता है।

service_url (expires_in: service.url_expires_in, स्वभाव:: इनलाइन) स्रोत दिखाएं
# File activestorage/app/models/active_storage/variant.rb, line 70
def service_url(expires_in: service.url_expires_in, disposition: :inline)
  service.url key, expires_in: expires_in, disposition: disposition, filename: filename, content_type: content_type
end

सेवा पर संस्करण का URL लौटाता है। यह URL सुरक्षा के लिए अल्पकालिक है और इसका उपयोग उपयोगकर्ताओं के साथ सीधे नहीं किया जाता है। इसके बजाय, service_url को केवल एक स्थिर, संभवतः प्रमाणित URL से पुनर्निर्देशित किया जाना चाहिए। एक अनुप्रेषित के पीछे service_url छिपाना भी आपको सभी URL को अपडेट किए बिना सेवाओं को बदलने की शक्ति देता है। और यह स्थायी URL को अनुमति देता है जो कि service_url को दृश्य में कैश किए जाने के लिए पुनर्निर्देशित करता है।

ActiveStorage::RepresentationsController को इंगित करने वाले वेरिएंट के लिए स्थिर URL प्राप्त करने के लिए url_for(variant) (या निहित रूप, जैसे + link_to variant + या + redirect_to variant +) का उपयोग करें, जो बदले में इस सेवा का उपयोग अपने पुनर्निर्देशन के लिए करेगा।