例如,我在项目中有网址:http://localhost:3000/images/20/thumb/300x300。其中300x300 - 动态参数在url中为作物宽度和图像高度。我如何加密这个网址?可以通过为http标头添加令牌吗?我需要这个以保护服务器不生成具有不同宽度和高度的图像(100x100,150x200,300x200 ...)的不同网址。请显示代码示例。
答案 0 :(得分:0)
您可以在路线上使用此功能:
get 'images/:id/thumb/:size', size: /^[0-9]+x[0-9]+$/
在您的控制器上,您可以访问图像的ID和大小:
def show
@image= Image.find( params[:id] )
width, height=params[:size].split("x").map{|s| s.to_i}
# ...
end
如果您接受的图像固定大小很少,则可以使用以下约束:
Rails.application.routes.draw do
get 'images/:id/thumb/:size', size: /^[0-9]+x[0-9]+$/,
constraints: ImageSizeConstraint.new
end
class ImageSizeConstraint
def matches?(request)
params = request.path_parameters
if %w(100x100 150x200 300x200).include? params[:size]
return true
else
return false
end
end
end
答案 1 :(得分:0)
根据您的问题,我了解您希望服务器仅呈现一个可接受的维度。因此,加密URL,您只需在控制器中过滤它
...
ALLOW_THUMB_SIZES = %w( 100x100 150x200 300x200 )
...
def generate_image
thumb_size = params[:thumb_size]
if ALLOW_THUMB_SIZES.include? thumb_size
# do resize image to thumb_size here
else
# resize to some default size e.g. 300x300
# or throw exception...
end
end
...