Ruby on Rails 5.2 - ActionController::DataStreaming

मॉड्यूल ActionController :: DataStreaming




ruby

मॉड्यूल ActionController :: DataStreaming

शामिल मॉड्यूल:
ActionController :: प्रतिपादन

रेंडर करने के बजाय, मनमाने ढंग से डेटा भेजने और ब्राउजर में फाइल स्ट्रीमिंग के लिए तरीके।

निजी उदाहरण तरीके

send_data (डेटा, विकल्प = {}) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/data_streaming.rb, line 108
def send_data(data, options = {}) #:doc:
  send_file_headers! options
  render options.slice(:status, :content_type).merge(body: data)
end

ब्राउज़र को दिए गए बाइनरी डेटा भेजता है। यह तरीका render plain: data करने के समान है, लेकिन यह भी आपको यह निर्दिष्ट करने की अनुमति देता है कि ब्राउज़र को फाइल अटैचमेंट के रूप में प्रतिक्रिया (एक डाउनलोड डायलॉग में) या इनलाइन डेटा के रूप में प्रदर्शित करनी चाहिए या नहीं। आप सामग्री प्रकार, फ़ाइल नाम और अन्य चीजें भी सेट कर सकते हैं।

विकल्प:

  • :filename - ब्राउज़र के उपयोग के लिए फ़ाइल नाम सुझाता है।

  • :type - एक HTTP सामग्री प्रकार निर्दिष्ट करता है। 'एप्लिकेशन / ऑक्टेट-स्ट्रीम' के लिए डिफ़ॉल्ट। आप Mime::Type.register साथ एक पंजीकृत प्रकार के लिए एक स्ट्रिंग या एक प्रतीक निर्दिष्ट कर सकते हैं Mime::Type.register , उदाहरण के लिए: json। यदि छोड़ा गया है, तो फ़ाइल :filename में निर्दिष्ट फ़ाइल एक्सटेंशन से अनुमान लगाया जाएगा। यदि एक्सटेंशन के लिए कोई सामग्री प्रकार पंजीकृत नहीं है, तो डिफ़ॉल्ट प्रकार 'एप्लिकेशन / ऑक्टेट-स्ट्रीम' का उपयोग किया जाएगा।

  • :disposition - निर्दिष्ट करता है कि फ़ाइल को इनलाइन दिखाया जाएगा या डाउनलोड किया जाएगा। मान्य मान 'इनलाइन' और 'अटैचमेंट' (डिफ़ॉल्ट) हैं।

  • :status - प्रतिक्रिया के साथ भेजने के लिए स्थिति कोड निर्दिष्ट करता है। 200 में चूक।

सामान्य डेटा डाउनलोड:

send_data buffer

डाउनलोड एक गतिशील रूप से उत्पन्न टारबॉल:

send_data generate_tgz('dir'), filename: 'dir.tgz'

ब्राउज़र में एक छवि सक्रिय रिकॉर्ड प्रदर्शित करें:

send_data image.data, type: image.content_type, disposition: 'inline'

HTTP send_file की अधिक जानकारी के लिए send_file * हेडर और कैशिंग।

send_file (पथ, विकल्प = {}) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/data_streaming.rb, line 68
def send_file(path, options = {}) #:doc:
  raise MissingFile, "Cannot read file #{path}" unless File.file?(path) && File.readable?(path)

  options[:filename] ||= File.basename(path) unless options[:url_based_filename]
  send_file_headers! options

  self.status = options[:status] || 200
  self.content_type = options[:content_type] if options.key?(:content_type)
  response.send_file path
end

फ़ाइल भेजता है। यह Rack :: Sendfile मिडलवेयर के माध्यम से सर्वर-उपयुक्त विधि (जैसे X-Sendfile) का उपयोग करता है। उपयोग करने के लिए शीर्ष लेख config.action_dispatch.x_sendfile_header माध्यम से सेट किया config.action_dispatch.x_sendfile_header । आपका सर्वर X-Sendfile-Type हेडर सेट करके भी आपके लिए इसे कॉन्फ़िगर कर सकता है।

यदि यह एक वेब पेज से आ रहा है तो पथ पैरामीटर को साफ करने के लिए सावधान रहें। send_file(params[:path]) दुर्भावनापूर्ण उपयोगकर्ता को आपके सर्वर पर कोई भी फ़ाइल डाउनलोड करने की अनुमति देता है।

विकल्प:

  • :filename - ब्राउज़र के उपयोग के लिए फ़ाइल नाम सुझाता है। File.basename(path) लिए डिफ़ॉल्ट।

  • :type - एक HTTP सामग्री प्रकार निर्दिष्ट करता है। आप Mime::Type.register साथ एक पंजीकृत प्रकार के लिए एक स्ट्रिंग या एक प्रतीक निर्दिष्ट कर सकते हैं Mime::Type.register , उदाहरण के लिए: json। यदि छोड़ा गया है, तो फ़ाइल :filename में निर्दिष्ट फ़ाइल एक्सटेंशन से अनुमान लगाया जाएगा। यदि एक्सटेंशन के लिए कोई सामग्री प्रकार पंजीकृत नहीं है, तो डिफ़ॉल्ट प्रकार 'एप्लिकेशन / ऑक्टेट-स्ट्रीम' का उपयोग किया जाएगा।

  • :disposition - निर्दिष्ट करता है कि फ़ाइल को इनलाइन दिखाया जाएगा या डाउनलोड किया जाएगा। मान्य मान 'इनलाइन' और 'अटैचमेंट' (डिफ़ॉल्ट) हैं।

  • :status - प्रतिक्रिया के साथ भेजने के लिए स्थिति कोड निर्दिष्ट करता है। 200 में चूक।

  • :url_based_filename - true सेट करें यदि आप चाहते हैं कि ब्राउज़र URL से फ़ाइल नाम का अनुमान :url_based_filename , जो कुछ ब्राउज़रों पर i18n फ़ाइल नाम के लिए आवश्यक है (सेटिंग :filename इस विकल्प को ओवरराइड करता है)।

डिफ़ॉल्ट सामग्री-प्रकार और सामग्री-विवाद हेडर मनमाने ढंग से बाइनरी फ़ाइलों को अधिक से अधिक ब्राउज़रों में डाउनलोड करने के लिए सेट किए गए हैं। IE संस्करण 4, 5, 5.5, और 6 सभी को विभिन्न प्रकार के क्वर्की के लिए जाना जाता है (विशेषकर SSL पर डाउनलोड करते समय)।

सरल डाउनलोड:

send_file '/path/to.zip'

ब्राउज़र में JPEG दिखाएं:

send_file '/path/to.jpeg', type: 'image/jpeg', disposition: 'inline'

ब्राउज़र में 404 पृष्ठ दिखाएं:

send_file '/path/to/404.html', type: 'text/html; charset=utf-8', status: 404

अन्य सामग्री के बारे में पढ़ें- * HTTP हेडर यदि आप उपयोगकर्ता को www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11 में अधिक जानकारी (जैसे सामग्री-विवरण) प्रदान करना चाहते हैं।

यह भी ध्यान रखें कि दस्तावेज़ को प्रॉक्सी और ब्राउज़र द्वारा कैश किया जा सकता है। प्राग्मा और कैश-कंट्रोल हेडर घोषित करते हैं कि बिचौलियों द्वारा फाइल को कैसे कैश किया जा सकता है। कैश्ड प्रतिक्रियाओं को जारी करने से पहले उन्हें क्लाइंट के साथ सर्वर को मान्य करने की आवश्यकता होती है। कैशे-कंट्रोल हेडर स्पेक के लिए www.mnot.net/cache_docs / वेब कैशिंग और www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9