# 聊天上传错误

**URL:** https://meta.discourse.org/t/chat-upload-bug/379253
**Category:** Bug
**Tags:** chat
**Created:** [2025年八月19日 08:31 UTC](https://meta.discourse.org/t/chat-upload-bug/379253 "2025-08-19T08:31:15Z")
**Posts on this page:** 1
**Showing post:** 5

<div class="post-metadata">

### Author: ![clechasseur](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/clechasseur/32/517802_2.png) [@clechasseur](https://meta.discourse.org/u/clechasseur)
#### Post date: [2025年八月26日 05:30 UTC](https://meta.discourse.org/t/chat-upload-bug/379253/5 "2025-08-26T05:30:26Z")

</div>

我花了一些时间才弄清楚这一点，但我想我找到了原因。我认为这与[此代码](https://github.com/discourse/discourse/blob/d2516cbdcdebe799d710fcb93a53f3298365dc5a/plugins/chat/app/services/chat/create_message.rb#L151-L154)有关：

```ruby
def fetch_uploads(params:, guardian:)
  return [] if !SiteSetting.chat_allow_uploads
  guardian.user.uploads.where(id: params.upload_ids) # 特别是这里
end

```

当创建一个新的聊天消息时，会调用此方法来获取要附加到消息的上传文件。可能是为了确保所有权，该方法会通过 Guardian 的用户来获取上传文件，以便只允许属于该用户的上传文件。

问题在于上传文件是重复的，正如[此处](https://github.com/discourse/discourse/blob/d2516cbdcdebe799d710fcb93a53f3298365dc5a/lib/upload_creator.rb#L131-L145)所示：

```ruby
# 我们已经有那个上传文件了吗？
@upload = Upload.find_by(sha1: sha1)

# ...

# 如果有，则返回之前的上传文件
if @upload
  add_metadata!
  UserUpload.find_or_create_by!(user_id: user_id, upload_id: @upload.id) if user_id
  return @upload
end

```

我_认为_一个可能的修复方法是遍历 `UserUpload` 而不是仅仅考虑属于用户的上传文件。`UserUpload` 将上传文件链接到多个用户，这似乎是我们需要的。我还不能 100% 确定如何正确地做到这一点；时间不早了，我要去睡了，但如果其他人没有修复它，我稍后会回来尝试做一个 PR。🙂

---

_[View the full topic](https://meta.discourse.org/t/chat-upload-bug/379253)._
