在 NGINX 中获取文件 exif 数据

在 NGINX 中获取文件 exif 数据

在下面的代码中,我设置了一些有关图像的信息变量(例如标题、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 作业)来运行脚本并完成作业。

相关内容