8

状況

ペーパークリップを使用して画像を添付したシンプルなモデルがあります。このモデルには、いくつかの処理済みスタイル(サムネイル、フル、機能)があります。この時点で、正常に機能し/public/assets/foo/、の各オブジェクトのディレクトリ構造を作成します。これには、オリジナル、サムネイル、フル、および機能のサブディレクトリが含まれます。

問題

元の(高解像度の)画像をユーザーが取得できるように公開したくありません。ですから、オリジナルをの外のどこかに保存するために別のパスを指定する方法があることを望んでいます/public/。理想的には、ペーパークリップは、現在のように、元の画像をソースとして使用してスタイルを再処理できる必要があります。

また、外部のユーザーがオリジナルにアクセスできないようにするための代替案も受け付けています。ここで最も実用的な解決策は何でも。ありがとう。

4

2 に答える 2

22

元のファイルを public ディレクトリの外に配置するカスタム補間を使用することをお勧めします。このようなもの:


Paperclip.interpolates :maybe_public do |attachment, style|
  style == :original ? "private" : "public"
end

has_attached_file :image, :path => ":rails_root/:maybe_public/:attachment..."

これにより、:original ファイルが保護のために公開されていないディレクトリに保存されますが、ペーパークリップ アクセスは引き続き許可されます。また、サムネイルは標準アクセス用のパブリック ディレクトリに保持されます。

于 2009-05-12T13:23:39.430 に答える
0

許容できる場合は、デフォルトのスタイルを設定して、オリジナルの保存をスキップできます。

  has_attached_file :image,
                    :styles => { :normal => "800x600>" },
                    :default_style => :normal

そうでない場合で、オリジナルを保持したい場合、Apache を使用している場合は、.htaccess ファイルを使用してオリジナル ディレクトリへのアクセスを制限できます。

<FilesMatch "^\.(jpe?g|gif|png)$">
   Order allow,deny
   Deny from all
</Files>
于 2009-05-12T07:18:32.327 に答える