【问题标题】:Broken images in mongodb databasemongodb数据库中的损坏图像
【发布时间】:2017-02-11 08:14:14
【问题描述】:

从数据库中清除损坏图像的最佳方法。我的 mongodb 数据库中有 30,000 多个图像条目,但是随着时间的推移,许多条目已经损坏。我只想返回在服务器端没有损坏的图像。找到所有损坏的图像并添加参数或从数据库中删除损坏的图像的最佳方法是什么?

目前,我将所有图像返回到前端,并隐藏在“onerror”属性上。我应该以某种方式导出和迭代所有图像并导出图像ID吗?有没有更好的选择或者我可以用什么来做到这一点?只是寻求建议。

【问题讨论】:

  • 我在 mongo 中遇到图像损坏问题,转储数据并恢复它解决了问题
  • 您可以编写一个 cron 作业,每月(或更长)一次尝试使用 HTTP.get() 加载每个图像,并在失败时从集合中删除 url。
  • 您在数据库中为图像存储了什么(图像的文件路径、URL、二进制图像、API 参考……)?您如何判断图像“损坏”(即损坏/丢失/...)?
  • Mikkel - 文件 url 没有损坏。文件目标不再存在。 MichelFloyd - 我可能会尝试,但它不应该在未来发生。如果我发现这是处理大量文件的最佳解决方案@Stennie,我实际上可能会做一次这项工作还有一些文件丢失了。

标签: javascript image mongodb meteor imagesource


【解决方案1】:

您可以使用 Blaze 模板事件处理程序来捕获图像加载错误,然后将图像标记为失败,或者直接将其删除。自清洁并始终运行...

Template.ImageLoader.events({
  //TODO: possibly add an extra class name on the img tag, to make sure you only catch errors from your collection.
  'error img': function(event, template) {
    const url = event.currentTarget.src;
    //TODO: find the image in your collection, using the url
    //TODO: perform cleanup (flag or delete)
    alert(`error loading image ${url}`);
  }
});

我建议在您的集合中添加一个错误计数器,并在每次发生加载错误时添加$inc。一旦加载错误计数达到一定数量,将其删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2015-01-19
    • 2017-03-20
    • 1970-01-01
    • 2015-04-22
    • 2012-08-20
    相关资源
    最近更新 更多