上传视频文件失败,原因是 JS 错误

我知道 Discourse 通常不用于上传视频,但在此情况下,我遇到一个问题,希望有人能指引我如何解决。

某些上传的视频文件会无限期地卡在“上传中 100%”。用户唯一能做的就是刷新页面或关闭帖子。无论等待多久,无论文件大小如何。

很明显,有一些代码在进行某种形式的验证或检查,导致文件卡住。我对 Ruby On Rails / Discourse 开发不太熟悉,所以还没弄清楚文件在哪个环节卡住了。不过,我已经找到了一种绕过问题并成功上传文件的方法,尽管不太用户友好。

如果我将同一个文件,将文件名扩展名从 .mp4 重命名为 .pdf,文件就能毫无问题地上传,甚至会正确地添加扩展名。

例如:
如果我上传 PXL_12234563421LS.mp4,文件会无限期卡住;如果我上传为:PXL_12234563421LS.pdf,上传就会完成,甚至会在帖子中添加正确的视频 markdown:

![PXL_20200811_12234563421LS|video](upload://sxVpgLrc3L2MukaD5eS5QOgPY7j.mp4)

有人熟悉这个流程吗?能解释一下发生了什么,以及我是否可以在某个地方禁用它?我也很乐意在得到一些指导后,找出问题所在并提交一个 bug。

谢谢。

4 个赞

也许是网络问题。
但通常刷新页面就能解决问题,然后视频就可以上传了?

我感谢您的回复,但这并不是网络问题。它发生在所有计算机和所有浏览器上。我正在从运行 discourse 实例的同一网络上传此文件,因此它不会连接到互联网。

更改扩展名导致成功上传,即使在原始文件仍在“上传中”的同一帖子中,也肯定表明 discourse 中针对视频文件的某些代码在某些文件上无限期地卡住了。

1 个赞

控制台中是否显示了错误?

您能否将视频上传到 try.discourse.org

1 个赞

文件有多大?我认为最大文件大小是 30MB。

我也想问这是通过手机还是电脑,但你在下面提到了电脑。

我确实尝试在 try.discourse.org 上执行此操作,但那里不允许使用 .mp4 文件,抱歉,我应该在原始帖子中说明这一点。

另外,这是一个小文件,只有 8MB。我发现文件大小无关紧要。

当您问控制台中是否发生错误时,我正在查看日志,并且我看到上传开始,然后该事件没有显示其他任何内容,您是否指的是我应该查看的控制台的其他位置?

移动版和电脑版都显示相同的问题,这绝对是特定于生成的文件所致。如果我使用 ffmpeg 重新编码文件,问题也会消失。另外,我尝试了 Chrome 和 Firefox,两者都显示相同的问题。

需要明确的是,我所做的只是将文件名从“movie.mp4”更改为“movie.pdf”,然后它就可以上传,而不会卡在“Uploading 100%”处。

文件大小为 8MB,显示此问题的任何电影文件大小不一。如果我能确定并追踪它在上传过程中经过的路径,我或许就能缩小它卡住的位置。

现在可以了,我刚添加了。

我指的是浏览器控制台——那里或服务器日志(/logs)中是否显示了什么?

好的,我可以在那里重现它,我不得不找一个稍微小一点的例子,但我有很多 :slight_smile:

第一张图片显示我上传了一个扩展名为 .mp4 的文件,并且无论我等待多久,它都卡在“上传 100%”处。我等待了 5 分钟才截屏。

我将 post 保持打开状态,并卡在 try.discourse.org 上的“上传 100%”状态,用户:testdub。如果这对您有帮助的话。在得到您的回复之前,我会一直保持打开状态。

您不允许上传 PDF,但允许 TXT,所以我只是将文件重命名为 .txt,上传就完成了。

当我上传具有 .txt 扩展名的相同文件时,它会在几秒钟内完成,并显示为视频 markdown。

为了完整起见,这里是我上传的文件的 md5:

62b865b29c47acbce859c27246c0d7c3  PXL_20240812_174504425.LS.mp4
62b865b29c47acbce859c27246c0d7c3  PXL_20240812_174504425.LS.txt

我在尝试上传该文件时,在浏览器控制台中看到了此错误:

image

Uncaught IndexSizeError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The source width is 0.
    at composer-video-thumbnail-uppy.js:80:31

8998f3f964284f7e0ab4007836dbddd736757617.mp4.gz (3.3 MB)

这是我们需要在客户端修复的问题。

2 个赞

好的,太棒了,谢谢你,Michael!

我当时正准备回复类似的内容:


当我在 Firefox 的控制台中查看时,我看到了类似这样的内容:

Media resource blob:devsite.net could not be decoded, error: Error Code: NS_ERROR_DOM_MEDIA_METADATA_ERR (0x806e0006)

在 Chrome 上,我得到了一个不同的、也许更能说明问题的错误:

Uncaught DOMException: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The source width is 0.
    at https://devsite.net/assets/chunk.d340137c92abde91812c.d41d8cd9.js:74:3649
3 个赞

我遇到过类似的问题,在WordPress上。然后MP4文件损坏了。我上传了一个短的MP4文件,没有问题,如果它能工作,也许MP4本身,或者创建它的那个过程,应该检查一下?

您已经解决了这个问题吗?

我们有人在看修复方案,是的。

3 个赞

修复此问题的补丁现已上线:

3 个赞

Blake,您好,感谢您的快速响应!我测试了一下,在 Chrome 上运行效果很好,但在 Firefox 上却不行,仍然卡在“Uploading 100%”界面,并且控制台中出现以下错误:

Media resource blob:https://devsite.net/a2deff66-3376-4c6e-9cca-f18275c312ce could not be decoded.
Media resource blob:https://devsite.net/a2deff66-3376-4c6e-9cca-f18275c312ce could not be decoded, error: Error Code: NS_ERROR_DOM_MEDIA_METADATA_ERR (0x806e0006)

我使用的是 Firefox 129.0.2 版本进行测试的。

如果您需要我提供其他信息,请告知。

1 个赞

这个修复程序 https://github.com/discourse/discourse/pull/28523 应该能解决问题。在这种情况下,视频缩略图不会被创建,但这次不会阻止视频实际上传。

3 个赞

谢谢,我用 Firefox 成功上传了。非常感谢您的快速响应和跟进!

2 个赞

此主题在上次回复后 3 天自动关闭。不允许新的回复。