Cómo extraer solo el nombre del archivo de la uri de solicitud

11

Estoy tratando de reescribir la uri de solicitud dependiendo de la extensión del archivo, luego extraer solo el nombre del archivo de la uri y almacenarlo en otra carpeta. El problema aquí no es una variable predefinida para el nombre del archivo y las variables disponibles uri, request_uriy request_filenamedará la uri completa.

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

lo mejor que puedo hacer es obtener la extensión .jpg o .gif, que cuando la coloco $1de $request_filenameesta manera:

location @imgstore { 
    proxy_pass $file_folder$1;
}

Entonces, quiero saber:

  1. ¿Cómo obtener el nombre del archivo de la solicitud?
  2. ¿Es la forma correcta de almacenar imágenes de una carpeta a otra?
Johnta
fuente

Respuestas:

17

¿Desea el nombre de archivo de la solicitud original o de la uri actual (después de cualquier redirección interna)? Ambos son posibles utilizando el módulo de mapa :

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

Luego use $ request_basename o $ basename donde los necesite. Tenga en cuenta que los mapas deben definirse en el contexto http {}, lo que los convierte en hermanos del servidor {} s.

kolbyjack
fuente
Quiero el nombre del archivo de la uri actual, no creo que el módulo de mapa pueda dar eso, pero lo intentaré,
Johnta
Lo probé localmente antes de publicar, y ese segundo mapa funciona (siempre que esté usando 0.9.6+)
kolbyjack
Gracias Kolbyjack, gran truco que hizo el trabajo, obtuve el nombre del archivo y la extensión.
Johnta