2010-03-07 46 views
5

说吧,我有一个Web应用程序,允许用户上传图片和文档,我的应用程序将所有这些资产存储在S3上,有没有一种方法可以监控资源使用PER用户帐户?是否可以通过Ruby on Rails应用程序监控Amazon S3资源使用情况?

例如,如果用户帐户具有1GB的存储限制,那么我如何监控任何个人正在使用的津贴的多少?

此外(但这对我来说不是问题),如果该用户帐户也有5GB的带宽限制,是否有任何工具可以让我监视他们的S3带宽?

回答

2

是的,这是可能的。您可以使用papreclip来管理文件上传(或任何其他可信的上传管理插件/宝石)。大多数这些工具可让您访问上传文件的文件大小。您可以将这些文件与asset_uri一起存储在数据库中(我想您已经存储了这些文件),并检查用户是否可以上传另一个文件,只需将所有资产的所有大小与相应的user_id进行总和即可。

Users: 
    id 
    email_address 
    first_name 
    upload_limit 

Assets: 
    id 
    user_id 
    uri 
    filesize 
    filename 

然后,由特定用户抢上载文件的总大小,你可以这样做:

class User < ActiveRecord::Base 
    has_many :assets 

    #Check if the user can upload another file 
    def can_upload? 
    if Asset.sum('filesize', :conditions => 'user_id = #{self.id}') >= self.upload_limit 
     return false 
    else 
     return true 
    end 
    end 

    #See the user's used storage space 
    def used_storage 
    return Asset.sum('filesize', :conditions => 'user_id = #{self.id}') 
    end 

    #See how much space the user has remaining 
    def available_storage 
    if self.can_upload? 
     return self.upload_limit - Asset.sum('filesize', :conditions => 'user_id = #{self.id}') 
    else 
     return 0 
    end 
    end 
end 

你可以看到我正在使用ActiveRecord sum功能,在这里做计算。您可以轻松使用地图或其他基于ruby的解决方案。

相关问题