【问题标题】:Render directory contents with sinatra使用 sinatra 渲染目录内容
【发布时间】:2015-09-27 11:11:10
【问题描述】:

我想通过 sinatra 的路由 dsl 渲染目录的内容

在我的浏览器中,我可以像这样访问文件夹:

file:///Users/lfender/source/onesearch/public/bower_components/swagger-ui/dist/

使用 sinatra 路由,我想将路由指向这个静态目录:

get '/api-docs/' do
  root = File.join(settings.public_folder, 'bower_components', 'swagger-ui', 'dist')
  File.read(File.expand_path(root))
end

上面的路由将因Is a directory @ io_fread 而失败,因为我传递的是目录而不是文件。

如何通过 sinatra 路由读取静态目录的内容,以便使用 /api-docs/ 提供公共目录中的文件?使用 sinatra 可以做到这一点吗?

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    http://www.sinatrarb.com/intro.html 中搜索splat

    get '/api-docs/*' do |sub_path|
      path = File.join(settings.public_folder, 'bower_components', 'swagger-ui', 'dist', sub_path)
      File.read(File.expand_path(path))
    end
    

    【讨论】:

      【解决方案2】:

      想通了 - 您可以通过接受文件路径作为参数来使用 sinatra dsl 提供静态资产:

        get '/api-docs/:path_1/:path_2' do
          path = File.join(settings.public_folder, 'bower_components', 'swagger-ui', 'dist', params[:path_1], params[:path_2])
          File.read(File.expand_path(path))
        end
      
        get '/api-docs/:path' do
          path = File.join(settings.public_folder, 'bower_components', 'swagger-ui', 'dist', params[:path])
          File.read(File.expand_path(path))
        end
      

      注意,您可能需要为响应设置适当的 mime/内容类型

      【讨论】:

      • 您可以添加完整的应用程序文件夹结构(树)吗?有一次我做了类似的东西。它实际上是一个基于网络的 webm/mp4 播放器。
      猜你喜欢
      • 2012-06-22
      • 2011-07-15
      • 2011-04-27
      • 1970-01-01
      • 2017-11-29
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多