0

我在 Rails 中有一个 webapp,它作为 AJAX 文件上传功能。文件上传到远程服务器 (AWS S3)。我目前的策略是temp/在用户提交表单之前将文件上传到目录中(使用其原始名称),然后将它们重命名为最终名称。

但问题是,如果多个用户尝试同时上传两个具有相同名称的文件,那么其中一个会覆盖另一个。

我正在考虑解决此问题的策略是在加载上传页面时生成随机 SHA1,将它们存储在本地表中以确保它们是唯一的,并在重命名临时文件时将它们删除。

您认为这种方法存在问题吗?

解决这个问题的好策略是什么?

4

1 回答 1

0

一个问题是,如果他们在没有上传任何内容的情况下离开页面,他们的哈希值将留在数据库中,最终会造成混乱。我会避免在数据库中存储任何这种临时的东西。

与其尝试想出自己的方式来命名临时文件,不如使用 ruby​​ tempfile 库,它会为您做到这一点?


本来我以为你是把文件上传到ruby服务器,自己上传到s3。如果用户直接上传文件,临时文件将无济于事。如果您只想要临时文件的唯一名称,UUID 生成器可能适合您。有一个Ruby UUID 生成器 gem,它的设计目的是不产生重复,即使在分布式环境中也是如此。如果您使用这些命名文件,则不需要在数据库中存储任何内容。

于 2012-09-12T00:35:53.733 回答