2012-10-28 11 views
5

Tôi đang sử dụng sóng mang, đường ray và amazon s3. Mỗi lần tôi tiết kiệm một hình ảnh, hình ảnh xuất hiện trong s3 và tôi có thể nhìn thấy nó trong công tác quản lý giao diện điều khiển với tên như thế này:amazon s3 và tên sóng mang hình ảnh ngẫu nhiên trong thùng không khớp trong cơ sở dữ liệu

https://s3.amazonaws.com/bucket-name/ uploads/images/10/888fdcfdd6f0eeea_1351389576.png

Nhưng trong mô hình, tên là thế này:

https://bucket-name.s3.amazonaws.com/ uploads/images/10/b3ca26c2baa3b857_1351389576.png

Trước hết, tại sao tên ngẫu nhiên lại khác? Tôi tạo nó trong trình tải lên như vậy:

def filename 
    if original_filename 
    "#{SecureRandom::hex(8)}_#{Time.now.to_i}#{File.extname(original_filename).downcase}" 
    end 
end 

Tôi biết nó không tạo ra chuỗi ngẫu nhiên mọi cuộc gọi vì sai địa chỉ trong mô hình nhất quán và được lưu. Một nơi nào đó trong quá trình một cái mới phải được tạo ra để tiết kiệm trong mô hình sau khi tên hình ảnh đã được lưu và gửi đến amazon s3. Lạ thật.

Ngoài ra, tôi có thể có url khớp với url theo s3/bucket thay vì bucket.s3 mà không sử dụng regex không? Có một lựa chọn trong carrierwave hoặc một cái gì đó cho điều đó?

Trả lời

2

Tôi đã giải quyết nó bằng cách lưu tên tệp nếu nó vẫn là tên tệp gốc. Trong trình tải lên, hãy đặt:

def filename 
    if original_filename && original_filename == @filename 
    @filename = "#{any_string}#{File.extname(original_filename).downcase}" 
    else 
    @filename 
    end 
end 

Vấn đề về đường sumbd so với đường dẫn không thực sự là vấn đề. Nó hoạt động với tên miền phụ. I E. https://s3.amazonaws.com/bucket-name/https://bucket-name.s3.amazonaws.com/ cả hai đều hoạt động tốt.

3

CarrierWave theo mặc định không lưu trữ URL. Thay vào đó, nó tạo ra nó mỗi khi bạn cần nó.

Vì vậy, mỗi lần filename được gọi là nó sẽ trả về một giá trị khác, vì Time.now.to_i.

Sử dụng cột created_at để thay thế hoặc thêm cột mới để lưu trữ id ngẫu nhiên hoặc tên tệp đầy đủ.

+0

Tôi đánh giá cao mẹo mà nó không được lưu. Tôi chỉ cần lưu nó – AJcodez