上传文件清理 Rake 任务

EXIF 数据会自动从 JPG 或 TIFF 图像上传中剥离。

EXIF 数据可能包含敏感信息(例如 GPS 位置),因此您可以从上传到早期版本的 GitLab 的现有图像中删除 EXIF 数据。

要求

要运行这个 Rake 任务,需要在您的系统上安装 exiftool。如果您安装了 GitLab:

  • 使用 Omnibus 包,一切就绪。
  • 从源代码,确保安装了exiftool

    # Debian/Ubuntu
    sudo apt-get install libimage-exiftool-perl
    
    # RHEL/CentOS
    sudo yum install perl-Image-ExifTool
    

从现有上传数据中删除 EXIF 数据

要从现有上传数据中删除 EXIF 数据,请运行以下命令:

sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif

默认情况下,此命令以“试运行”模式运行,并且不会删除 EXIF 数据。 它可用于检查是否(以及多少)图像应该被清理。

Rake 任务接受以下参数。

参数 类型 说明
start_id integer 仅处理具有相同或更大 ID 的上传文件
stop_id integer 仅处理 ID 相同或更小的上传文件
dry_run boolean 不要删除 EXIF 数据,只检查 EXIF 数据是否存在。默认为true
sleep_time float 处理每个图像后暂停秒数。默认为 0.3 seconds
uploader string 仅对给定上传器的上传文件运行清理:FileUploaderPersonalFileUploaderNamespaceFileUploader
since date 仅对比给定日期更新的上传文件运行清理。例如,2019-05-01

如果上传文件过多,可以通过以下方式加快清理速度:

  • sleep_time 设置为较低的值。
  • 并行运行多个 Rake 任务,每个任务都有单独的上传 ID 范围(通过设置 start_idstop_id)。

要从所有上传文件中删除 EXIF 数据,请使用:

sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif[,,false,] 2>&1 | tee exif.log

要删除 ID 介于 100 和 5000 之间的上传的 EXIF 数据并在每个文件后暂停 0.1 秒,请使用:

sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif[100,5000,false,0.1] 2>&1 | tee exif.log

输出被写入一个 exif.log 文件,因为它通常很长。

如果上传文件的清理失败,则 Rake 任务的输出中应显示错误消息。典型的原因包括文件在存储中丢失或它不是有效的图像。