2010-03-07 14 views
5

Giả sử, tôi có một ứng dụng web cho phép người dùng tải lên hình ảnh và tài liệu và ứng dụng của tôi lưu trữ tất cả các tài sản đó trên S3, có cách nào tôi có thể theo dõi việc sử dụng tài nguyên PER tài khoản người dùng không?Có thể giám sát việc sử dụng tài nguyên Amazon S3 thông qua ứng dụng Ruby on Rails không?

Ví dụ: nếu tài khoản người dùng có giới hạn dung lượng 1GB, làm cách nào tôi có thể theo dõi số tiền phụ cấp mà bất kỳ cá nhân nào đang sử dụng?

Hơn nữa (nhưng đây là vấn đề ít hơn với tôi) nếu tài khoản người dùng đó cũng có giới hạn băng thông 5GB, có công cụ nào cho phép tôi theo dõi băng thông S3 của mình không?

Trả lời

2

Có, điều này là có thể. Bạn có thể sử dụng papreclip để quản lý các tệp tải lên (hoặc bất kỳ plugin/đá quý quản lý tải lên có uy tín nào khác). Hầu hết các công cụ này cung cấp cho bạn quyền truy cập vào tệp của tệp được tải lên. Bạn chỉ cần lưu trữ các tệp này trong cơ sở dữ liệu cùng với asset_uri (mà tôi cho rằng bạn đã lưu trữ) và để kiểm tra xem người dùng có thể tải lên một tệp khác hay không, chỉ cần tổng hợp tất cả các kích thước của tất cả các tài sản với user_id thích hợp.

Users: 
    id 
    email_address 
    first_name 
    upload_limit 

Assets: 
    id 
    user_id 
    uri 
    filesize 
    filename 

Sau đó, để lấy tổng kích thước của file được tải lên bởi một người dùng cụ thể, bạn có thể làm:

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 

Bạn có thể thấy tôi đang làm cho việc sử dụng ActiveRecord sum chức năng ở đây để làm việc tính . Bạn có thể dễ dàng sử dụng một bản đồ hoặc một số giải pháp dựa trên ruby ​​khác.

Các vấn đề liên quan