ruby-on-rails – 无法使用Rails中的redis gem在Redis中正确保存
发布时间:2020-12-17 02:18:29 所属栏目:百科 来源:网络整理
导读:我正在尝试将图像保存到Redis,稍后将在Resque任务中将其提取并上传到我们的图像服务器. ImageHandle类将为我们提取图像.就目前而言,我只关心将图像输入和输出Redis. class ImageHandle ActiveRecord::Base attr_accessible :uploaded,:image after_save :sav
我正在尝试将图像保存到Redis,稍后将在Resque任务中将其提取并上传到我们的图像服务器.
ImageHandle类将为我们提取图像.就目前而言,我只关心将图像输入和输出Redis. class ImageHandle < ActiveRecord::Base attr_accessible :uploaded,:image after_save :save_image def image_data $redis.get(redis_key) end def image=(value) @image = value end private def redis_key @redis_key ||= "image_handle:#{id}:image" end def save_image $redis.set(redis_key,@image.read) end end 在初始化程序中设置$redis的位置: $redis = Redis.new 这是我的测试文件: require 'test_helper' class ImageHandleTest < ActiveSupport::TestCase include ActionDispatch::TestProcess setup do clear_redis end test 'saves an image' do image = fixture_file_upload('screaming-eagle.jpg','image/jpg') # You can only read from a file fixture once same_image = fixture_file_upload('screaming-eagle.jpg','image/jpg') image_handle = ImageHandle.create(image: image) expected = same_image.read actual = image_handle.image_data puts "length of expected: #{expected.length}" puts "length of actual: #{actual.length}" assert_equal expected,actual end end 结果是: length of expected: 81500 length of actual: 78524 F Finished tests in 0.270385s,3.6984 tests/s,3.6984 assertions/s. 1) Failure: test_saves_an_image:23 我不知道是怎么回事. 当我尝试设置(“b”* 81500)然后获得它时,我将其恢复到预期的81500长度. 感谢你给与我的帮助. 解决方法
redis-rb将字符串转换为由Encoding :: default_external定义的默认外部编码,通常为UTF-8.见
https://github.com/redis/redis-rb/commit/61fa1f884a643cd7dea8e0e56498860594058a39
您可以在存储二进制数据之前将其编码为Base64,并在检索后从Base64解码: class ImageHandle < ActiveRecord::Base attr_accessible :uploaded,:image after_save :save_image def image_data Base64.decode $redis.get(redis_key) end def image=(value) @image = value end private def redis_key @redis_key ||= "image_handle:#{id}:image" end def save_image $redis.set redis_key,Base64.encode(@image.read) end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |