Как я могу отобразить сохраненное изображение BLOB с помощью Ruby и Sequel

Я не использую Rails, поэтому функция send_data, к сожалению, работать не будет.

image = User.select("image, image_mime").where("username = '#{params[:name]}'").first
  send_data( image.image,
             :type => image.image_mime,
             :disposition => 'inline')

person desbest    schedule 30.09.2012    source источник


Ответы (1)


Ознакомьтесь с исходным кодом метода send_file:

def send_file(filename, content_type = nil, content_disposition = nil)
  content_type ||= Rack::Mime.mime_type(::File.extname(filename))
  content_disposition ||= File.basename(filename)

  response.body = ::File.open(filename, 'rb')
  response['Content-Length'] = ::File.size(filename).to_s
  response['Content-Type'] = content_type
  response['Content-Disposition'] = content_disposition
  response.status = 200

  throw(:respond, response)
end

Вы можете попробовать сделать то же самое, только установить тело в image.image вместо того, чтобы читать его из файла.

person Mladen Jablanović    schedule 30.09.2012
comment
Я попробовал @user = User[view]; send_file("@user.avatarcontent"), и он говорит, что Invalid argument - �PNG похоже, что он принимает только местоположения имен файлов, а не строки больших двоичных объектов. - person desbest; 30.09.2012
comment
Вы отправляете контент, а не файл, поэтому вы не можете использовать метод send_file как есть. Вместо этого вы должны изменить его в соответствии с вашими потребностями. - person Mladen Jablanović; 01.10.2012
comment
Итак, я должен использовать свой мозг в течение 10 секунд, чтобы я мог написать код Ruby, который отображает файл с определенной кодировкой? Это именно то, что я пытался сделать! gist.github.com/5b3842bf970208d6bc49 - person desbest; 07.10.2012