5

(RedHat または Ubuntu 環境で) RAILS_ROOT の下にないマウントされたファイル システムから画像を表示する方法を見つけようとしています。このアプリは実際には Tomcat を介してデプロイされているため、シンボリック リンクを使用したくありません。Tomcat をシャットダウンすると、Tomcat はシンボリック リンクをたどってマウント内のすべてのイメージを削除しようとします。public/images の下に画像を置くことも、これらのファイルの数とサイズのためにオプションではありません。

send_file を調べましたが、1 つの画像しか表示されません。適切にフォーマットされたページに、要求された 6 つの画像を表示する必要があります。肥大化のためにBase64エンコーディングを使用したくないのですが、レンダリングされたページで画像データを渡す方法が他にわかりません。

繰り返しますが、問題は、生成された HTML で URL を介して画像にアクセスできないことです。画像データは、ページの残りの部分と共に渡される必要があります。画像をサーバーにアップロードするための何らかのサービスを作成することがこれを処理する最善の方法であることはわかっていますが、今はこれを機能させる必要があります。

どんな助けでも大歓迎です!

4

1 に答える 1

12

明らかな理由により、Rails ではユーザーが .xml ファイルシステムの外部にあるファイルシステムの一部にアクセスすることを許可しませんRAILS_ROOT/public。あなたがsendfile(または好みでx-sendfile)について言及したとき、あなたは実際にそこへの道のりの一部でした。解決策は、Railsが通常どおりhtmlページを提供するようにすることです。これには、個々のファイルを提供するRailsアクションへのリンクが含まれています。

たとえば、ファイル システムの奥深くにある画像をいくつか表示したいとします。最初に、一度に 1 つの画像を提供するアクションを作成する必要があります。したがってconfig/routes.rb、次のように追加できます。

match '/serve_image/:filename' => 'images#serve'

次に、そのルートに一致するコントローラーを作成する必要があります。例えば:

class ImagesController < ApplicationController
  def serve
    path = "/my/servers/image/path/#{params[:filename]}"

    send_file( path,
      :disposition => 'inline',
      :type => 'image/jpeg',
      :x_sendfile => true )
  end
end

これで、画像が /serve_image/my_image.jpg の URL で利用できるようになります。最後に、必要な画像をすべて表示する適切な HTML ページを作成します。次のように簡単です。

<img src="/serve_image/image1.jpg">
<img src="/serve_image/image2.jpg">
<img src="/serve_image/image3.jpg">
<img src="/serve_image/image4.jpg">
于 2012-08-14T21:07:37.490 に答える