2013-03-08 39 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 2013-04-02 10:27:48