Help us learn about your current experience with the documentation. Take the survey.

上传文件清理 Rake 任务

  • 版本:免费、专业、旗舰
  • 产品:GitLab 自管理版

在上传 JPG 或 TIFF 图片时,EXIF 数据会自动移除。

EXIF 数据可能包含敏感信息(例如 GPS 位置),因此您可以从旧版 GitLab 中上传的现有图片中移除这些数据。

前提条件

要运行此 Rake 任务,您的系统上需要安装 exiftool。如果您安装 GitLab 的方式是:

  • 使用 Linux 软件包安装,则无需额外操作。

  • 使用自编译安装,请确保已安装 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

默认情况下,此命令以“dry run”(试运行)模式运行,并不会真正移除 EXIF 数据。它可用于检查哪些(以及有多少)图片需要清理。

此 Rake 任务接受以下参数。

参数 类型 描述
start_id 整数 仅处理 ID 大于或等于此值的上传文件
stop_id 整数 仅处理 ID 小于或等于此值的上传文件
dry_run 布尔值 不移除 EXIF 数据,仅检查是否存在 EXIF 数据。默认为 true
sleep_time 浮点数 处理每张图片后暂停的秒数。默认为 0.3 秒
uploader 字符串 仅对指定上传器的上传文件运行清理:FileUploaderPersonalFileUploaderNamespaceFileUploader
since 日期 仅对晚于指定日期的上传文件运行清理。例如 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 任务的输出中应会包含一条错误信息。常见原因包括文件在存储中丢失,或该文件不是有效的图片。

报告任何问题,并在问题标题中使用 ‘EXIF’ 前缀,同时附上错误输出以及(如果可能)相关图片。