2013-03-08 1 views
3

Эта идея в настоящее время находится только на чертежной доске, и я сначала задавался вопросом, возможно ли, тогда как это можно сделать.Запросить запрос процесса программно и обратный поток в Sinatra

Говорит, что приложение в Синатре имеет следующий файл: приложение

#!/usr/bin/env ruby 
# encoding: UTF-8 

require 'sinatra' 

get '/hi' do 
    "Hello World" 
end 

get '/' do 
    erb :index 
end 


get '/url_to_img.jpg' 
    #parse url 
    #process an image 
    #stream the image back to the client as nothing have happened 
end 

Может запрос изображения быть перехвачен, и как бы файл изображения будет возвращаемым завернутый в HTTP реагировать.

Извините, для очень грубый вопрос.

ответ

3

То, что вы описываете, возможно. Все, что вам нужно сделать, это вернуть двоичные данные на ваш маршрут Sinatra, гарантируя, что у вас есть правильный тип MIME для файла.

Вот пример, который определяет MIME изображения, создает эскиз и возвращает миниатюру в браузере:

get '/:filename' do |filename| 
    redirect 404 unless File.readable?(filename) 
    content_type detect_mime_type(filename) 
    create_thumbnail filename 
end 

Я использую следующие помощники:

require 'filemagic' 
require 'rmagick' 

def detect_mime_type(path) 
    FileMagic.new(FileMagic::MAGIC_MIME) 
    .file(path).gsub(/\n/,"").split(";").first 
end 

def create_thumbnail(path) 
    Magick::Image.read(filename) 
    .first.resize_to_fill(680, 500) 
end 

Конечно, вы не должны обслуживать файлы из вашего основного каталога веб-сайта; это только для иллюстративных целей.

+0

Спасибо за ответ и код шаблона, я попробую это :) – olovholm

Смежные вопросы