# 不存在的远程图像的占位符

**URL:** https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179
**Category:** Support
**Created:** [2022年十一月30日 09:48 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179 "2022-11-30T09:48:41Z")
**Posts on this page:** 14
**Page:** 1

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2022年十一月30日 09:48 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/1 "2022-11-30T09:48:42Z")

</div>

您好，

我已将 80,000 篇帖子从 phpBB 导入到 Discourse。帖子中有许多图片链接自外部网站，例如 `[img]http://www.domain.tld/image.jpg[/img]`，但这些图片已不存在。

帖子中不显示任何内容，这会引起用户不满，因为在某些帖子中，上下文会中断，用户不清楚在一个文本块和下一个文本块之间存在/曾经存在一张图片。

所以我的问题是：如果原始图片不再可用，是否可以在那里显示一个占位符图片？

此致，  
Roi

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2022年十一月30日 14:28 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/2 "2022-11-30T14:28:34Z")

</div>

它是否显示默认的代理商图片图标？我认为在帖子生成后应该会显示。

我自定义了我的。请看（包含代码）：

> [@Third migration, once again for a niche forum (Volkswagen Campers vans)](https://meta.discourse.org/t/third-migration-once-again-for-a-niche-forum-volkswagen-campers-vans/220224/8?u=canapin):
>
> The forum was old and users relied on external image hosting. They used a LOT of images in their forum. 40000 posts on 300000 contained at least 1 image, often way more. I even saw a post containing 150 images (!). Because old images hosting services are now down, the vast majority (maybe… 95%?) of the forum’s images are broken ad vitam (fun fact: even if 5% of the old images remain, they still take 10 GB of disk space after being uploaded to Discourse…), leading to a lot of broken image icons …

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2022年十一月30日 15:34 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/3 "2022-11-30T15:34:36Z")

</div>

> [@Canapin](#):
>
> 它是否显示默认的经纪人图片图标？我认为帖子烘焙后应该会显示。

不，它什么也不显示。但我越来越接近了。我认为这是由 ![]() BBCode 标签引起的。如果我编辑帖子并删除该标签，[它看起来像这样](https://forum.gdngs.de/t/optik/4487)。

那么我需要删除所有 [img] BBCode 标签并重新烘焙帖子吗？

> [@Canapin](#):
>
> 我定制了我的。请看（包含代码）：
> 
> [Third migration, once again for a niche forum (Volkswagen Campers vans) - #8 by Canapin](https://meta.discourse.org/t/third-migration-once-again-for-a-niche-forum-volkswagen-campers-vans/220224/8?u=canapin)

这看起来很有趣。我认为我也需要它。 🙂 谢谢！

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2022年十一月30日 15:45 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/4 "2022-11-30T15:45:06Z")

</div>

> [@Roi](#):
>
> 所以我需要移除所有的 [img] BBCode 标签并重新烘焙帖子吗？

我不确定。如果你移除一个 **内联** BBCode 标签，那么你的文本中就会留下纯文本的图片 URL，并且不会显示损坏的图片图标。

也许你可以尝试移除 BBCode 标签，但在图片 URL 前后插入一个空行。请先进行备份！

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2022年十一月30日 19:39 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/5 "2022-11-30T19:39:36Z")

</div>

> [@Canapin](#):
>
> 我不确定。如果你移除一个 **内联** BBcode标签，那么你的文本中就会有纯文本格式的图片URL，并且不会显示损坏的图片图标。

是的。该死，你可能是对的。

那么，我需要更改什么才能显示损坏的图片图标——或者远程图片（我猜是下载的），如果它仍然存在的话？

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2022年十二月1日 00:06 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/6 "2022-12-01T00:06:24Z")

</div>

我不确定。  
我也应该遇到过这个问题，因为我也导入了一个带有 [IMG] 标签的 phpBB 论坛，并且 95% 的图片都损坏了，但据我回忆，在“烘焙”之后，即使是内联的损坏图片也能被正确替换为损坏图片的图标，不过我也许记错了 🤔  
恐怕我现在没有现成的解决方案，但我确信有办法解决。  
您碰巧有包含损坏的内联图片的帖子的链接吗？您能否也复制粘贴原始文本？

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2022年十二月1日 07:35 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/7 "2022-12-01T07:35:24Z")

</div>

> [@Canapin](#):
>
> 您碰巧有指向包含损坏的内联图像的消息的链接吗？您能否也粘贴原始文本？

当然，这是一个实时示例：

> **[Grill-Shirts von 3Dsupply.de](https://forum.gdngs.de/t/grill-shirts-von-3dsupply-de/5515)**
>
> Hier wird sicherlich ungesund gegrillt. Die Grillshirt Saison 2008 der Beef Buddies of Germany. (Leider war es mir spontan nicht moeglich, via Google eine Seite zu finden, muss da nochmal intensiver schauen.) /edit: Scheint wohl alles von...

如果您查看第一条帖子，在最后一行文本和签名下方有一个很大的空白区域。在源代码中，您可以看到损坏的图像，例如：

`<p><img src="http://www.grillen-darf-nicht-gesund-sein.de/gfx/beef-buddies-2008_initiative.jpg" alt="" role="presentation" loading="lazy"></p>`

来自数据库的“原始”文本：

`[img]http://www.grillen-darf-nicht-gesund-sein.de/gfx/beef-buddies-2008_initiative.jpg[/img]`

来自数据库的“已处理”文本：

`<p><img src="http://www.grillen-darf-nicht-gesund-sein.de/gfx/beef-buddies-2008_initiative.jpg" alt="" role="presentation"></p>`

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2022年十二月1日 09:32 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/8 "2022-12-01T09:32:19Z")

</div>

您是否启用了 **将远程图片下载到本地** 设置？仅当 Discourse 尝试下载远程图片但失败后，才会出现损坏的图片图标。

如果禁用了该设置，则会留下一条空行。

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2022年十二月1日 09:57 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/9 "2022-12-01T09:57:13Z")

</div>

是的，它已启用。一直都是，甚至在我从 phpBB 导入之前。\n\nphpBB 导入器是否会忽略此设置？根据我的理解，烹饪（recooking）应该在导入器之外进行，并使用设置。\n\n重新烹饪所有帖子会造成任何损害吗？

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2022年十二月1日 14:43 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/10 "2022-12-01T14:43:26Z")

</div>

> [@Roi](#):
>
> 重新烘焙所有帖子会有什么坏处吗？

我尝试了：

```plaintext
rake posts:rebake_match["[img]"]
      767 / 767 (100.0%)
767 个帖子已完成！

```

我上面提到的帖子（以及看起来像所有其他帖子）看起来完全一样……

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2022年十二月1日 15:41 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/11 "2022-12-01T15:41:38Z")

</div>

我認為在 `/var/discourse/shared/standalone/import/settings.yml` 中有一個設定，我們可以將遠端圖片下載設為 true 或 false，但貼文無論是否設定此選項都會在匯入後進行烘焙。

我看到您的空行現在顯示預期的損壞圖片圖示：  
\u003chttps://forum.gdngs.de/t/grill-shirts-von-3dsupply-de/5515\u003e

 ![image](https://global.discourse-cdn.com/meta/original/4X/3/c/0/3c058b478a1f57be5b726ef780a639590aaf6a9c.png)

與其重新烘焙大量貼文，不如透過貼文管理選項重建特定貼文的 HTML，這是一個很好的測試方法，因為它會觸發重新烘焙：

![chrome_RLLvokErfg](https://global.discourse-cdn.com/meta/original/4X/7/0/0/70029ca84bb0ebc49565cc88ddbb894366b1d387.gif)

然後透過將其加入佇列來觸發 `UpdateHotlinkedRaw` 工作：

 ![image](https://global.discourse-cdn.com/meta/original/4X/b/0/7/b07bcf2dfaaa866c14737bd20309da92a83274f6.png)

我在我的測試執行個體上嘗試使用您的一張損壞圖片並在 BBcode 中進行測試。當「 **將遠端圖片下載到本機** 」被禁用時，空行仍然存在。當它被啟用時，則出現損壞圖片圖示。

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2022年十二月1日 16:53 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/12 "2022-12-01T16:53:25Z")

</div>

> [@Canapin](#):
>
> 我认为在 `/var/discourse/discourse/shared/standalone/import/settings.yml` 中有一个设置，我们可以将远程图片下载设置为 true 或 false，但帖子无论如何都会在导入后进行烘焙。
> 
> 我看到你现在空的行显示了预期的损坏图片图标：  
> [https://forum.gdngs.de/t/grill-shirts-von-3dsupply-de/5515](https://forum.gdngs.de/t/grill-shirts-von-3dsupply-de/5515)

哦，是的，你说得对。我认为那是在重新烘焙命令后出现的浏览器缓存问题。感谢你亲自检查！ 🙂

所以这不知何故是一个 phpBB 导入问题。我发誓我并没有在从 phpBB 导入所有内容 **之后** 更改任何与远程图片相关的配置设置……

> [@Canapin](#):
>
> 与其重新烘焙大量帖子，不如通过帖子管理选项重建特定帖子的 HTML，这会触发重新烘焙：
> 
> ![chrome_RLLvokErfg](https://global.discourse-cdn.com/meta/original/4X/7/0/0/70029ca84bb0ebc49565cc88ddbb894366b1d387.gif)

啊，太好了。我找到了它并点击了它。

> [@Canapin](#):
>
> 然后通过将其添加到队列来触发 UpdateHotlinkedRaw 作业：
> 
> ![image](https://global.discourse-cdn.com/meta/original/4X/b/0/7/b07bcf2dfaaa866c14737bd20309da92a83274f6.png)

我在 Sidekiq 中找不到任何 UpdateHotlinkedRaw 作业……你能帮我解决这个问题吗。我确信这不知何故是 PEBCAK。 😉

> [@Canapin](#):
>
> 我在我的测试实例上尝试使用你的一张损坏的图片，并在 BBCode 中。当“ **将远程图片下载到本地** ”被禁用时，空行仍然存在。当它被启用时，则出现了损坏的图片图标。

这似乎表明我在从 phpBB 导入所有内容 **之后** 启用了“将远程图片下载到本地”。嗯……由于我也有/有一个测试安装并且在那里测试了很多东西，我仍然很确定它在之前就已经开启了。

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2022年十二月1日 17:34 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/13 "2022-12-01T17:34:20Z")

</div>

> [@Roi](#):
>
> 我在 Sidekiq 中找不到任何 UpdateHotlinkedRaw 作业

注意：该作业将在几分钟后触发，进入 Sidekiq 只是为了更快地检查。

在重建帖子 HTML 后几秒钟，该 UpdateHotlinkedRaw 作业应该会出现在 Sidekiq 的“计划”选项卡中。

只有在 Discourse 论坛设置中启用了 **将远程图像下载到本地** 设置，并且您的帖子包含图像时，才能看到该作业。

如果那也不行，那我暂时没有其他想法了……！

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2022年十二月1日 17:42 UTC](https://meta.discourse.org/t/placeholder-for-non-existing-remote-images/247179/14 "2022-12-01T17:42:41Z")

</div>

> [@Canapin](#):
>
> UpdateHotlinkedRaw 作业应该在你重建帖子 HTML 后秒级出现在 Sidekiq 的 Scheduled（计划）选项卡中。
> 
> 只有当 Discourse 论坛设置中的 **download remote images to local** （将远程图片下载到本地）选项启用，并且你的帖子包含图片时，该作业才可见。
> 
> 如果这不起作用，那我暂时没有其他想法了……！

谢谢，这样就清楚了。我刚刚重新烘焙了一个帖子——一个没有远程图片的帖子。所以什么也没发生。 😉

而且谢谢你，你帮我在这里理清了事情。我现在看到占位符图片了。我最有可能用你在这里链接的 CSS 技巧替换占位符图片。
