Получить exif-данные файла в NGINX

Получить exif-данные файла в NGINX

В следующем коде я задаю некоторые переменные с информацией об изображении (например, заголовок, URL и т. д.)

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

Я хотел бы показать дату создания фотографии на странице. В идеале она должна быть в другой переменной…:

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

но, насколько мне известно, в NGINX нет переменной, которая содержала бы дату последнего изменения. Я просмотрел индекс переменных, но ничего не нашел. Nginx автоматически добавляет дату изменения в заголовок Last-Modified, так что он должен быть способен на это. Я также пробовал использовать , ssi_last_modifiedно, согласно некоторым ответам, это не сработает, потому что NGINX никогда не реализовывал полный SSI.

решение1

Время изменения файла НЕ совпадает с датой создания фотографии.

Хотя было бы просто заставить mtime соответствовать данным EXIF ​​и использовать это как прокси для данных, которые вы на самом деле хотите сообщить, есть потенциально другие данные, которые могут быть встроены в файл и которые могут быть полезны. Это похоже на проблему XY.

Если предположить, что у вас еще нет возможности сервера приложений на хосте, то добавление его только для решения этой проблемы кажется излишним (и открывает дверь для множества осложнений с укреплением). Так что если бы это был я, я бы просто написал краулер, чтобы сбросить данные в машиночитаемый формат внутри корня документа, например

#!/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

Где dump_exif_dataчто-то вроде...

#!/bin/bash

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

Добавьте немного магии AJAX на свои страницы, добавьте задание Cron (или задание Incron) для запуска скрипта, и работа будет выполнена.

Связанный контент