gpt4 book ai didi

ruby - 无论要求什么,都使用 sinatra 提供单个图像

转载 作者:数据小太阳 更新时间:2023-10-29 08:46:49 25 4
gpt4 key购买 nike

我正在使用 sinatra 提供图像,但是当您转到该图像时,我希望 sinatra 提供另一个图像。所以在服务器上请求的每个图像都将返回一个静态图像。

%w[sintra].each{|gem| require gem}

# <img src="https://www.mywebsite.com/1234.png">
# <img src="https://www.mywebsite.com/abcd.png">

get '/:image' do
image = params[:image].split(".")[0]
# image = 1234

if image == key
#do stuff
else
#do other stuff
end

#this is where I'm having a problem
special_code_that_replaces_1234.png = "static_image_on_server.png"
#so sinatra should return "static_image_on_server.png" no matter what image is asked for.

end

我已经查看了 sinatra 的文档。这个具体。 http://www.sinatrarb.com/intro.html#Accessing%20the%20Request%20Object我可能看错了部分,“触发另一条路线”我想我在兜圈子。

我的应用确实有一个带有“static_image_on_server.png”的“公共(public)”目录

最佳答案

这个答案假设你有一个目录 public/imgs 用来存储你的图片:

使用重定向():

require 'sinatra'

get "/imgs/*.*" do
img_name, ext = params[:splat]

if image_name == key
#do stuff
else
#do other stuff
end

redirect to('/imgs/alien1.png')
end

默认情况下,Sinatra 会先检查请求的文件是否在./public 文件夹中,如果存在则返回。如果文件不在 ./public 中,那么 Sinatra 将尝试匹配路由。因此,路由中的代码无法阻止用户查看您的公共(public)文件夹中的现有图像。

可以disable :static 添加到路由文件的顶部以阻止Sinatra 在./public 中查找请求的文件。相反,Sinatra 将直接进行路由匹配。在这种情况下,示例中的 redirect() 将导致无限循环。因此,如果您不希望用户看到公共(public)文件夹中的图像,则不能使用 redirect()。

使用 send_file():

看起来 tadman 的 send_file() 解决方案需要绝对(或相对)文件系统路径,因此您可以这样做:

require 'sinatra'

get "/imgs/*.*" do
img_name, ext = params[:splat]

if image_name == key
#do stuff
else
#do other stuff
end

send_file File.expand_path('imgs/alien1.png', settings.public_folder)
end

请注意,使用 send_file() 时,带有最初请求的图像的原始 url 将继续显示在浏览器中,这可能是您想要的,也可能不是您想要的。

关于ruby - 无论要求什么,都使用 sinatra 提供单个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25411681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com