क्योंकि open(source_url)
रिटर्न कुछ की एक आई/ओ संभाल File.basename(open(source_url))
काम नहीं करेगा क्रमबद्ध करें, File.basename
की तरह स्ट्रिंग नहीं।
File.basename(source_url)
, काम का एक बेहतर मौका है, जब तक कि यूआरएल कुछ path/to/service/with/parameters/in/line/like/this
प्रकार एन्कोडिंग का उपयोग कर रहा है होगा।
रूबी की यूआरआई लाइब्रेरी में यहां मदद करने के लिए उपयोगी टूल हैं। कुछ ऐसा:
File.basename(URI.parse(source_url).path)
एक प्रारंभिक बिंदु होगा।
require 'uri'
File.basename(URI.parse('http://www.example.com/path/to/file/index.html').path
# => "index.html"
और: उदाहरण के लिए
File.basename(URI.parse('http://www.example.com/path/to/file/index.html?foo=bar').path)
# => "index.html"
क्या आप जानते हैं कि अगर मैं फ़ाइल आकार भी और कैसे पुनर्प्राप्त कर सकते हैं?
स्थानीय स्तर पर HTTP सामान परीक्षण करने के लिए एक शानदार तरीका, कमांड लाइन से gem server
चलाते हैं, और जवाहरात इसके प्रलेखन के लिए एक छोटे से वेब सर्वर आग जाने के लिए है:
require 'open-uri'
html_doc = open('http://0.0.0.0:8808/') do |io|
puts io.size
io.read
end
puts html_doc.size
# => 114350
# => 114350
आप एक ब्लॉक का उपयोग करते हैं OpenURI के open
कमांड के साथ, यह आपको ब्लॉक वैरिएबल में कनेक्शन के बारे में बहुत सारी जानकारी तक पहुंच प्रदान करता है, जो Tempfile
कक्षा का एक उदाहरण है। तो, आप size
का उपयोग कर आने वाली फ़ाइल का आकार पा सकते हैं।
कि छोटे फ़ाइलों के लिए ठीक है, लेकिन अगर आप एक बड़ी फ़ाइल में खींच रहे आप एक head
अनुरोध है, जो आकार शामिल हो सकता है भेजने के लिए Net :: HTTP का उपयोग कर जांच करने के लिए चाहते हो सकता है। मैं कहता हूं कि हो सकता है, क्योंकि कभी-कभी सर्वर नहीं जानता कि कितना वापस किया जाएगा, गतिशील सामग्री के मामले में, या सीजीआई या उप-सेवा द्वारा वापस लौटाई जाने वाली सामग्री जो कहने के लिए परेशान नहीं है।
"हेड" अनुरोध का उपयोग करने का लाभ यह है कि सर्वर पूरी सामग्री को वापस नहीं करता है, केवल हेडर। इसलिए, अतीत में, मैंने यह देखने के लिए कि मुझे आवश्यक डेटा प्राप्त हो सकता है, मैंने head
का उपयोग करके एक अनुरोध को पूर्ववत कर दिया है। यदि नहीं, तो मुझे सामान्य get
का उपयोग करके पूर्ण प्रतिक्रिया में खींचने के लिए मजबूर होना होगा।
धन्यवाद, क्या आप जानते हैं कि मैं फाइलसाइज़ को भी पुनः प्राप्त कर सकता हूं और फ़ाइल के सभी एमबी प्राप्त करने के इंतजार किए बिना? – ElektroStudios
सामग्री-लंबाई शीर्षलेख के अंदर देखें। – Danyel