Forum: Ruby on Rails MS-SQL deliveres binary image as array

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Günther L. (Guest)
on 2008-11-03 13:17
Hello!

I need to display images stored in a MS-SQL database but I get the
following error:

NoMethodError (undefined method `unpack' for #<Array:0x48cbff0>):
    c:/ruby/lib/ruby/1.8/base64.rb:59:in `decode64'

I guess its because MS-SQL delivers an arry...

Is there a solution to this problem??

Please help me!
lacky
Robert W. (Guest)
on 2008-11-03 17:05
> NoMethodError (undefined method `unpack' for #<Array:0x48cbff0>):
>     c:/ruby/lib/ruby/1.8/base64.rb:59:in `decode64'

From this is looks to me like some code is attempting to decode the
image data from Base64. Are you sure your image data is encoded using
Base64? I tend to doubt it. MS-SQL is likely just storing the raw binary
data. So it makes sense the you would have an array of bytes.

It would be helpful if you could post the code that you're using to
display the image. Normally in RoR there is a method that returns the
raw image data from a request with the proper content-type header. For
example the content-type header for a JPEG would be image/jpeg.

Somehow your application needs to tell the browser what the binary data
represents. It could be pretty much anything (JPEG, GIF, PDF, etc). This
is typically accomplished using the send_data method.

Here's an example:
def sales_graph
  png_data = Sales.plot_for(Date.today.month)
  send_data(png_data, :type => "image/png", :disposition => "inline")
end

Günther Lackner wrote:
> Hello!
>
> I need to display images stored in a MS-SQL database but I get the
> following error:
>
> NoMethodError (undefined method `unpack' for #<Array:0x48cbff0>):
>     c:/ruby/lib/ruby/1.8/base64.rb:59:in `decode64'
>
> I guess its because MS-SQL delivers an arry...
>
> Is there a solution to this problem??
>
> Please help me!
> lacky
Günther L. (Guest)
on 2008-11-04 09:17
Hello!

Thanks for your reply. The function in the controller looks like this:

def get_front_image
 device = Device.find(:first, :conditions => ["ID1 = ?", params[:id]])
 @front = device.THUMBFRONT
 send_data (@front,:type => 'image/gif',
    :filename => 'front_view.gif',
    :disposition =>  'inline')
end

You might be right, it could be a byte array... but how can I display
it??

best regards
lacky

Robert W. wrote:
>> NoMethodError (undefined method `unpack' for #<Array:0x48cbff0>):
>>     c:/ruby/lib/ruby/1.8/base64.rb:59:in `decode64'
>
> From this is looks to me like some code is attempting to decode the
> image data from Base64. Are you sure your image data is encoded using
> Base64? I tend to doubt it. MS-SQL is likely just storing the raw binary
> data. So it makes sense the you would have an array of bytes.
>
> It would be helpful if you could post the code that you're using to
> display the image. Normally in RoR there is a method that returns the
> raw image data from a request with the proper content-type header. For
> example the content-type header for a JPEG would be image/jpeg.
>
> Somehow your application needs to tell the browser what the binary data
> represents. It could be pretty much anything (JPEG, GIF, PDF, etc). This
> is typically accomplished using the send_data method.
>
> Here's an example:
> def sales_graph
>   png_data = Sales.plot_for(Date.today.month)
>   send_data(png_data, :type => "image/png", :disposition => "inline")
> end
>
> Günther Lackner wrote:
>> Hello!
>>
>> I need to display images stored in a MS-SQL database but I get the
>> following error:
>>
>> NoMethodError (undefined method `unpack' for #<Array:0x48cbff0>):
>>     c:/ruby/lib/ruby/1.8/base64.rb:59:in `decode64'
>>
>> I guess its because MS-SQL delivers an arry...
>>
>> Is there a solution to this problem??
>>
>> Please help me!
>> lacky
Günther L. (Guest)
on 2008-11-05 11:06
Hi all!

I FOUND A SOLUTION!!!

Just follow this article:

http://blog.mcmoyer.com/2007/9/18/using-ms-sqlserv...

best regards
Lacky
This topic is locked and can not be replied to.