เปิดสตรีม IO จากไฟล์ในเครื่องหรือ url


105

ฉันรู้ว่ามี libs ในภาษาอื่นที่สามารถใช้สตริงที่มีพา ธ ไปยังไฟล์ในเครื่องหรือ url และเปิดเป็นสตรีม IO ที่อ่านได้

มีวิธีง่ายๆในการทำทับทิมหรือไม่?

คำตอบ:


225

open-uriเป็นส่วนหนึ่งของไลบรารี Ruby มาตรฐานและจะกำหนดลักษณะการทำงานใหม่openเพื่อให้คุณสามารถเปิด url รวมถึงไฟล์ในเครื่องได้ มันส่งกลับFileวัตถุดังนั้นคุณควรจะสามารถที่จะเรียกวิธีการเช่นและreadreadlines

require 'open-uri'
file_contents = open('local-file.txt') { |f| f.read }
web_contents  = open('http://www.stackoverflow.com') {|f| f.read }

2
มีวิธีส่งคืนวัตถุไฟล์เช่นเดียวกับที่คุณทำจากไฟล์แนบ ActionMailer หรือไม่?
AnApprentice

9
รู้ว่าตอนนี้เก่าไปหน่อย แต่คุณสามารถทำได้:content = open("http://example.com").read
อัตโนมัติ

6
คุณทำได้ แต่การทำนอกการปิดแบบนี้จะทำให้ file descriptor เปิดอยู่ นี่อาจเป็นปัญหาสำหรับการใช้งานบางอย่าง
Aaron Hinni

19
โปรดทราบว่าopen-uriจะไม่สตรีมไฟล์ดังนั้นคุณจึงไม่สามารถอ่าน 4k แรกได้ open-uriจะอ่านไฟล์ทั้งหมดไปยังหน่วยความจำในขณะที่เปิด
zed_0xff

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }หากคุณกำลังมองหาวิธีที่จะประกันไม่ได้โทรKernal.open. ยังเข้าใจกฎความปลอดภัยของ rubocop
newdark-it
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.