# 编辑帖子时发送许多视频/音频上传请求

**URL:** <https://meta.discourse.org/t/sending-many-requests-for-video-audio-upload-while-editing-post/161487>\
**Category:** Bug\
**Created:** [2020年八月20日 08:48 UTC](https://meta.discourse.org/t/sending-many-requests-for-video-audio-upload-while-editing-post/161487 "2020-08-20T08:48:22Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![kkurdupov](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kkurdupov/32/191014_2.png) [@kkurdupov](https://meta.discourse.org/u/kkurdupov)\
**Post date:** [2020年八月20日 08:48 UTC](https://meta.discourse.org/t/sending-many-requests-for-video-audio-upload-while-editing-post/161487/1 "2020-08-20T08:48:22Z")

</div>

大家好！我想提交一个 Bug。  
已在 v2.4.5 和 v2.5.0 版本中复现。

### 前提条件

- 创建一篇包含视频/音频上传的帖子。
- 我使用安全媒体上传进行了测试，但非安全媒体上传也应能复现。
- 开始编辑该帖子。
- 打开浏览器的开发者控制台。可选：设置上传 API 的过滤器。
- 等待所有请求完成，然后清空控制台。

### 复现步骤

- 在左侧（编辑）区域输入任意内容。
- 检查浏览器的开发者控制台。

### 实际结果

- 每次按键都被视为更改，因此简单的打字操作会不断触发视频上传事件。
- 大量更改会导致发送海量请求，随后因 API 速率限制而 **拒绝请求** ，并导致论坛 **自动登出** 。

### 预期结果

- 在 **编辑帖子** 时，不应触发任何音频/视频上传请求。

请查看动图：

 ![post-editing](https://global.discourse-cdn.com/meta/original/3X/b/4/b4db25fe383dac62a8fb8146806d03a591fe0fb2.gif)

## 关于此 Bug 的说明：

[这一行代码](https://github.com/discourse/discourse/blob/0967ce478d85ad5053522944b36ed9212f867457/app/assets/javascripts/pretty-text/addon/upload-short-url.js#L152) 导致了该 Bug。它在每次预览渲染（实际上即每次帖子内容变更时）都会调用 `<video>`/`<audio>` DOM 元素的 **load** 函数。

---

<div class="post-metadata">

**Author:** ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)\
**Post date:** [2020年八月20日 16:19 UTC](https://meta.discourse.org/t/sending-many-requests-for-video-audio-upload-while-editing-post/161487/2 "2020-08-20T16:19:56Z")

</div>

它在 2.6 测试版中是否仍然存在？

---

<div class="post-metadata">

**Author:** ![kkurdupov](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kkurdupov/32/191014_2.png) [@kkurdupov](https://meta.discourse.org/u/kkurdupov)\
**Post date:** [2020年八月20日 16:25 UTC](https://meta.discourse.org/t/sending-many-requests-for-video-audio-upload-while-editing-post/161487/3 "2020-08-20T16:25:39Z")

</div>

是的，该问题在 2.6 beta 版本以及 test-passed 分支的最新提交（208d85aaff0392a3a796f84ea78670def6ed7b8e）中依然存在。

---

<div class="post-metadata">

**Author:** ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)\
**Post date:** [2020年八月20日 17:41 UTC](https://meta.discourse.org/t/sending-many-requests-for-video-audio-upload-while-editing-post/161487/4 "2020-08-20T17:41:10Z")

</div>

> [@kkurdupov](#):
>
> 每次按键都被视为更改，因此简化输入会不断触发视频上传事件。

这很奇怪。我只有在勾选网络标签页中的“禁用缓存”复选框时才能复现该问题。当我取消勾选“禁用缓存”时，结果符合预期。我使用的是 Ubuntu 系统上的 Chrome 浏览器。从你的视频来看，你似乎没有勾选“禁用缓存”，所以我不确定造成差异的原因是什么。

---

<div class="post-metadata">

**Author:** ![kkurdupov](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/kkurdupov/32/191014_2.png) [@kkurdupov](https://meta.discourse.org/u/kkurdupov)\
**Post date:** [2020年八月21日 02:30 UTC](https://meta.discourse.org/t/sending-many-requests-for-video-audio-upload-while-editing-post/161487/5 "2020-08-21T02:30:20Z")

</div>

“禁用缓存”不会影响请求的发送。它仅影响请求结果的来源——是来自浏览器的缓存还是真实源。

这些上传请求是由在每次按键时重新渲染预览的代码发送的，这会导致创建新的视频/音频 DOM 元素。因此，对于新的 DOM 元素会调用 **load** ，这必然会发送请求。

即使是一个“已缓存”的（并非每次都是新创建的）DOM 元素，无论是否启用“禁用缓存”，它也只会在首次发送一次请求。

---

<div class="post-metadata">

**Author:** ![martin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin/32/491371_2.png) [@martin](https://meta.discourse.org/u/martin)\
**Post date:** [2020年八月24日 02:07 UTC](https://meta.discourse.org/t/sending-many-requests-for-video-audio-upload-while-editing-post/161487/8 "2020-08-24T02:07:10Z")

</div>

我查看了一下，在安全和非安全的视频上传中都能部分复现该问题。在某个时间点，系统似乎会缓存并停止频繁发送这些请求，但这仍然是一个问题。你指出的这一行：

> <https://github.com/discourse/discourse/blob/0967ce478d85ad5053522944b36ed9212f867457/app/assets/javascripts/pretty-text/addon/upload-short-url.js#L152>

是我添加的，但它现在似乎实际上没有任何影响。如果我将它移除，视频预览仍然可以正常工作。我知道我们之前已经针对视频缩略图等进行了其他改进，这些改进可能已经解决了我为此添加该行时所面对的问题。因此，我认为直接移除这一行即可，这将解决多次请求的问题。

---

<div class="post-metadata">

**Author:** ![martin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin/32/491371_2.png) [@martin](https://meta.discourse.org/u/martin)\
**Post date:** [2020年八月24日 03:18 UTC](https://meta.discourse.org/t/sending-many-requests-for-video-audio-upload-while-editing-post/161487/9 "2020-08-24T03:18:59Z")

</div>

已合并修复 [https://github.com/discourse/discourse/pull/10511。顺便感谢](https://github.com/discourse/discourse/pull/10511%E3%80%82%E9%A1%BA%E4%BE%BF%E6%84%9F%E8%B0%A2) @kkurdupov 提供的详细错误报告！

---

<div class="post-metadata">

**Author:** ![martin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin/32/491371_2.png) [@martin](https://meta.discourse.org/u/martin)\
**Post date:** [2020年八月25日 00:36 UTC](https://meta.discourse.org/t/sending-many-requests-for-video-audio-upload-while-editing-post/161487/10 "2020-08-25T00:36:45Z")

</div>


