如何在 Ruby 中对给定 URL 的 base64 媒体进行编码
我正在尝试将图像上传到 PingFM。他们的文档说:
media – base64 encoded media data.
我可以通过该网址访问此图片。我尝试过(实际上猜到了):
ActiveSupport::Base64.encode64(open("http://image.com/img.jpg"))
但我收到此错误:
TypeError: can't convert Tempfile into String
from /usr/lib/ruby/1.8/base64.rb:97:in `pack'
from /usr/lib/ruby/1.8/base64.rb:97:in `encode64'
from (irb):19
from :0
I'm trying to upload an image to PingFM. Their documentation says:
media – base64 encoded media data.
I can access this image via the URL. I tried (practically guessed) this:
ActiveSupport::Base64.encode64(open("http://image.com/img.jpg"))
But I get this error:
TypeError: can't convert Tempfile into String
from /usr/lib/ruby/1.8/base64.rb:97:in `pack'
from /usr/lib/ruby/1.8/base64.rb:97:in `encode64'
from (irb):19
from :0
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
对文件进行编码:
从编码字符串生成文件:
To encode a file:
To produce the file from the encoded string:
open
方法:返回一个 Tempfile 对象,而
encode64
需要一个 String。在临时文件上调用
read
应该可以解决问题:The
open
method:is returning a Tempfile object, while
encode64
expects a String.Calling
read
on the tempfile should do the trick:这也可以工作,它更干净一些
“你如何将其解码回文件?” - @user94154
其中
encoded_content
是之前编码的文件内容返回值。This will work too, it's a little cleaner
"How do you decode this back into a file?" - @user94154
Where
encoded_content
would be the previously encoded file content return value.将文件编码为 Base64 编码:
解码 Base64 编码文件:
Encode a file to base64 encoding:
Decode base64 encoded file:
这是我的解决方案:
1:将此自定义 image_tag 方法放入 ApplicationHelper 中,并包含 ActiveSupport 模块
2:然后,在要使用 base64 编码图像的视图内使用如下方法:
3:完成
Here's my solution:
1: Put this custom image_tag method into ApplicationHelper, and include ActiveSupport module
2: Then, inside the view you want to use base64 encoded image use the method like this:
3: DONE
如果对其他人有用,请参阅以下如何使用
Watir
将屏幕截图保存为 base64 的好处,这样做的好处是您不需要存储图像本身
In case it's useful to others, here's how to save a screenshot as base64 using
Watir
The beauty of this is you don't need to store the image itself