PingFMに画像をアップロードしようとしています。彼らの ドキュメント は言う:
media – base64 encoded media data.
この画像にはURLからアクセスできます。私はこれを試しました(実際に推測しました):
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
open
メソッド:
open("http://image.com/img.jpg")
tempfileオブジェクトを返していますが、encode64
は文字列を期待します。
一時ファイルでread
を呼び出すと、トリックが実行されます。
ActiveSupport::Base64.encode64(open("http://image.com/img.jpg") { |io| io.read })
ファイルをエンコードするには:
require 'base64'
Base64.encode64(File.open("file_path", "rb").read)
エンコードされた文字列からファイルを生成するには:
require 'base64'
encoded_string = Base64.encode64(File.open("file_path", "rb").read)
File.open(file_name_to_create, "wb") do |file|
file.write(Base64.decode64(encoded_string))
end
これも機能しますが、少しきれいです
require 'base64'
Base64.encode64(open("file_path").to_a.join)
「これをどのようにデコードしてファイルに戻しますか?」 -@ user94154
require 'base64'
open('output_file_name.txt', 'w') do |f|
f << Base64.decode64( encoded_content )
end
どこ encoded_content
は、以前にエンコードされたファイルコンテンツの戻り値です。
ファイルをbase64エンコードにエンコードします。
File.open("output_file","w"){|file| file.write [open("link_to_file").string].pack("m")}
Base64エンコードファイルをデコードします。
File.open('original', 'wb') {|file| file << (IO.readlines('output_file').to_s.unpack('m')).first }
私のソリューションは次のとおりです。
1:このカスタムimage_tagメソッドをApplicationHelperに配置し、ActiveSupportモジュールを含めます
module ApplicationHelper
include ActiveSupport
def image_tag_base64(file_path, mime_type = 'image/jpeg', options = {})
image_tag("data:#{mime_type};base64,#{Base64.encode64(open(file_path) { |io| io.read })}", options)
end
end
2:次に、base64でエンコードされたイメージを使用するビュー内で、次のような方法を使用します。
<%= image_tag_base64 @model.Paperclip_attribute.path(:size), @model.Paperclip_attribute.content_type, {class: 'responsive-img etc etc'} %>
:完了
他の人に役立つ場合、Watir
を使用してスクリーンショットをbase64として保存する方法を次に示します
browser = Watir::Browser.new(:chrome, {:chromeOptions => {:args => ['--headless', '--window-size=1000x1000']}})
browser.goto("http://www.yourimage.com")
browser.screenshot.base64
この利点は、画像自体を保存する必要がないことです。