Como extrair apenas o nome do arquivo da uri da solicitação

11

Estou tentando reescrever a solicitação uri, dependendo da extensão do arquivo, extraia apenas o nome do arquivo da uri e armazene-o em outra pasta. O problema aqui não é uma variável predefinida para o nome do arquivo e as variáveis ​​disponíveis uri, request_urie request_filenamefornecerá a URL 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;
       }
}

o melhor que posso fazer é obter a extensão .jpg ou .gif, que quando eu coloco $1no lugar da $request_filenameseguinte forma:

location @imgstore { 
    proxy_pass $file_folder$1;
}

Então, eu quero saber:

  1. Como obter o nome do arquivo da solicitação?
  2. É o caminho certo para armazenar imagens da pasta para outra?
Johnta
fonte

Respostas:

17

Deseja o nome do arquivo da solicitação original ou da uri atual (após qualquer redirecionamento interno)? Ambos são possíveis usando o módulo 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;
}

Em seguida, basta usar $ request_basename ou $ basename sempre que precisar deles. Observe que os mapas devem ser definidos no contexto http {}, tornando-os irmãos dos servidores {} s.

kolbyjack
fonte
Eu quero o nome do arquivo do uri atual, eu não acho módulo de mapa poderia dar isso, mas eu vou tentar,
Johnta
Eu testei localmente antes de postagem, e que segundo mapa trabalhos (desde que você está usando 0.9.6+)
kolbyjack
Obrigado Kolbyjack, grande truque que fez o trabalho, consegui o nome do arquivo e a extensão.
31912 Johnta