避免文件上传命名冲突的策略

时间:2012-09-12 00:28:24

标签: ruby-on-rails web-applications concurrency amazon-s3

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

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

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

你觉得这种方法有问题吗?

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

1 个答案:

答案 0 :(得分:0)

一个问题是,如果他们离开页面而没有上传任何内容,他们的哈希将留在数据库中,并最终弄得一团糟。我会避免将这些临时存储在数据库中。

为什么不使用红宝石tempfile library,而不是尝试用自己的方式来命名临时文件呢?


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