リクエストURIからファイル名のみを抽出する方法


11

ファイルの拡張子に応じてリクエストuriを書き換え、uriからファイル名のみを抽出して別のフォルダーに保存しようとしています。ここでの問題は、ファイル名と使用可能な変数には事前に定義された変数ではないurirequest_urirequest_filename完全なURIを与えます。

server{

        set $file_folder D:/nginx-1.0.15/imageAll/;  

        location ~*+.(gif|jpg)$ { 
            try_files $uri @imgstore;
        }

        location @imgstore { 
            proxy_pass $file_folder$request_filename;
            proxy_store on;
            proxy_temp_path /nginx-1.0.15/images/;
            proxy_store_access  user:rw  group:rw  all:r;
       }
}

私ができる最善のは、私が入れたときに、拡張子.JPGまたは.GIFを得ている$1の代わりに$request_filename、このように:

location @imgstore { 
    proxy_pass $file_folder$1;
}

だから、私は知りたい:

  1. リクエストからファイル名を取得する方法は?
  2. 画像をフォルダから別のフォルダに保存するのは正しい方法ですか?

回答:


17

元のリクエストまたは現在のURI(内部リダイレクト後)からのファイル名が必要ですか?それらは両方ともmapモジュールを使用して可能です

# Gets the basename of the original request
map $request_uri $request_basename {
    ~/(?<captured_request_basename>[^/?]*)(?:\?|$) $captured_request_basename;
}

# Gets the basename of the current uri
map $uri $basename {
    ~/(?<captured_basename>[^/]*)$ $captured_basename;
}

次に、必要な場所で$ request_basenameまたは$ basenameを使用します。マップはhttp {}コンテキストで定義する必要があることに注意してください。これにより、マップはサーバー{}の兄弟になります。


現在のuriからのファイル名が必要です。マップモジュールがそれを提供できるとは思いませんが、試します
Johnta

投稿する前にローカルでテストしましたが、2番目のマップは機能します(0.9.6以降を使用している限り)
kolbyjack

コルビージャックに感謝します。すばらしいトリックでうまくいきました。ファイル名と拡張子を取得しました。
Johnta 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.