所以我有一个与图像具有has_one_attached
关系的模型,称为样本。
meal.rb:
include Rails.application.routes.url_helpers
has_one_attached :sample
def get_sample_url
url_for(self.sample)
end
所以我使用上面的get_sample_url
来获取图像。它一直在返回路径,我只是假设它正在工作,并且已经使用相似的代码并获得了相似的链接构建了我的整个API。但是,当我将链接放入浏览器时,它不会返回任何内容。
返回的链接是http://local_host:3001/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--c83eba36bfec0607652b47d857104d3cf9e88009/cute%20owl.jpg
我想知道:从Rails API返回图像的理想方法是吗?为什么链接没有返回我的图像?如果我正在使用像Cloudinary这样的CDN来存储我的数据,这种方法行得通吗?
取决于。
如果我们谈论的是JSON,则实际上它没有二进制类型,因此,要在JSON响应本身中包含图片,您需要对它进行base64编码。由于这会极大地增加文件的大小,因此您只需要考虑条形码或QR码等简单图像。
对于大多数“普通”图像,例如用户头像等,您只想在json中包含一个URL,客户端就可以在需要/需要图像时请求该URL。
如果您的应用范围很小,则可以使用file system storage。但是Rails不会使您的本地主机可用于整个Internet。
但是,如果您想扩展应用程序,请使用快速且分布式的云CDN。如果您想花时间做其他事情然后进行设置,我会考虑使用带有existing adapter而不是Cloudinary的CDN。