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 响应中返回。

对不起,对于非常粗鲁的问题。

4

1 回答 1

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

当然,您不应该从您的主网站目录提供文件;这仅用于说明目的。

于 2013-03-08T23:17:01.547 回答