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?

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 {}.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.