这个想法目前只是在绘图板上,我首先想知道是否有可能,然后如何做到。
假设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响应中返回包裹的图像文件。
对不起,对于非常粗暴的问题。
答案 0 :(得分: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
当然,您不应该提供主网站目录中的文件;这仅用于说明目的。