Obtenha dados exif de arquivo no NGINX

Obtenha dados exif de arquivo no NGINX

No código a seguir estou definindo algumas variáveis ​​com informações sobre a imagem (como título, URL, etc.)

location /photo {
    ssi on;
    ssi_last_modified on;
    set $photosrc /photos/$request_basename;
    set $phototitle $request_basename;
    ...
}

Gostaria de mostrar a data de criação da foto na página. Idealmente deveria estar em outra variável…:

   ...
   set $photodate $???;
   ...

mas AFAICT não há variável no NGINX que contenha a data da última modificação. Examinei o índice da variável, mas não consegui encontrar nada. O Nginx adiciona automaticamente a data de modificação ao Last-Modifiedcabeçalho, portanto deve ser capaz disso. Também tentei usar, ssi_last_modifiedmas de acordo com algumas respostas não funcionou porque o NGINX nunca implementou SSI completo.

Responder1

O horário de modificação do arquivo NÃO é igual à data de criação da foto.

Embora fosse simples forçar o mtime a corresponder aos dados EXIF ​​e usá-los como um proxy para os dados que você realmente deseja relatar, há potencialmente outros dados que podem ser incorporados no arquivo que podem ser úteis. Isso soa como o problema XY.

Supondo que você ainda não tenha nenhum recurso de servidor de aplicativos no host, adicioná-lo apenas para resolver esse problema parece um exagero (e abre a porta para muitas complicações de proteção). Então, se fosse eu, eu simplesmente escreveria um rastreador para despejar os dados em um formato legível por máquina dentro da raiz do documento, por exemplo

#!/bin/bash

if [ ! -f /var/run/lastexif ] ; then
   touch -t 198012250200 /var/run/lastexif
fi
mv -f /var/run/lastexif /var/run/lastexif.old
touch /var/run/lastexif
find /var/www/html/photo -type f -newer /var/run/lastexif.old | dump_exif_data

Onde dump_exif_dataestá algo como ....

#!/bin/bash

while read fname
do
  if [ -n "$fname" -a -f "$fname" ] ; then
     exiftool "$fname" | tr -s ' ' > "${fname}.exif"
  fi
done

Espalhe um pouco da magia do ajax em suas páginas, adicione um cron job (ou incron job) para executar o script e o trabalho estará concluído.

informação relacionada