attachment_fu使用自定义域名的S3服务
March 2, 2008
Rails插件attachment_fu提供非常棒的文件上传管理功能。它支持文件系统、数据库及Amazon S3三种方式来存储上传的文件。
要使用S3这种存储方式,仅需在作为上传对象的Model类中(以Asset为例)调用带:storage => :s3选项的has_attachment方法。实际效果是,上传文件后,通过访问新创建的Asset对象的public_filename方法,便可获得形如http://s3.amazonaws.com/mybucketname/assets/1/file.ext这样的URL。
如果使用了S3的Virtual Hosting Name功能(通过CNAME设置),则上述URL并不是我们最终想要的形式。假设我的bucket名为assets.ashchan.com,DNS中使用CNAME指向了S3的服务器,那么我希望在通过attachment_fu上传的文件的Asset对象上,能拿到http://assets.ashchan.com/asset/1/file.ext这样的URL,而不是http://s3.amazonaws.com/assets.ashchan.com/asset/1/file.ext。
好办,只要在Asset类中加上这个方法:
def public_url(thumbnail = nil)
s3_protocol + self.bucket_name + self.full_filename(thumbnail)
end
调用时,参数与public_filename一致,而得到的是我们希望的自己域名的URL了。



[...] See also: Use S3 Virtual Hosting Name With attachment_fu [...]