Jak wyodrębnić tylko nazwę pliku z identyfikatora URI żądania

11

Próbuję przepisać uri żądania w zależności od rozszerzenia pliku, a następnie wyodrębnić tylko nazwę pliku z uri i zapisać go w innym folderze. Problemem tutaj nie jest żadna predefiniowana zmienna dla nazwy pliku i dostępnych zmiennych uri, request_urii request_filenameda ona pełny 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;
       }
}

najlepsze, co mogę zrobić, to uzyskać rozszerzenie .jpg lub .gif, które po umieszczeniu $1w miejscu $request_filenametakiego:

location @imgstore { 
    proxy_pass $file_folder$1;
}

Więc chcę wiedzieć:

  1. Jak uzyskać nazwę pliku z żądania?
  2. Czy to właściwy sposób przechowywania obrazów z folderu do innego?
Johnta
źródło

Odpowiedzi:

17

Czy chcesz, aby nazwa pliku pochodziła z pierwotnego żądania, czy z bieżącego identyfikatora URI (po przekierowaniu wewnętrznym)? Oba są możliwe przy użyciu modułu mapy :

# 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;
}

Następnie po prostu użyj $ request_basename lub $ basename, gdziekolwiek ich potrzebujesz. Zauważ, że mapy muszą być zdefiniowane w kontekście http {}, co czyni je rodzeństwem serwera {}.

kolbyjack
źródło
Chcę nazwę pliku z bieżącego interfejsu użytkownika, nie sądzę, aby moduł mapy mógł to dać, ale spróbuję,
Johnta,
Przetestowałem to lokalnie przed opublikowaniem, a ta druga mapa działa (o ile używasz wersji 0.9.6+)
kolbyjack,
Dziękuję Kolbyjack, świetna sztuczka, która wykonała zadanie, mam nazwę pliku i rozszerzenie.
Johnta