# Automation Professionals' Blob Server Module

**URL:** <https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970>\
**Category:** 3rd Party Modules\
**Tags:** ignition81, ignition83, perspective, database\
**Created:** [April 2, 2022, 7:16pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970 "2022-04-02T19:16:08Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [April 2, 2022, 7:16pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/1 "2022-04-02T19:16:08Z")

</div>

Automation Professionals is pleased to announce an alpha release of its new **Blob Server Module**.  
Available only for Ignition v8.1, ~~here~~.

The Blob Server Module provides a simple way to deliver images, PDF files, or other binary content from a database to your Perspective clients or other web applications. Without needing the WebDev module. All you need is a **Named Query** that has appropriate security settings and returns a single row with two columns: Content, and ContentType.

Modest documentation may be previewed [here](https://www.automation-pros.com/blobserve/doc).

😁

{ I have not decided how to price this. Won't be much, if anything. I created it today, start to finish, in about four hours. }

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [April 2, 2022, 7:57pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/2 "2022-04-02T19:57:08Z")

</div>

Note: the parameter check rejects any named query that uses a QueryString parameter. Not safe for this usage.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [April 4, 2022, 4:13pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/3 "2022-04-04T16:13:02Z")

</div>

More percolation yesterday and this morning. Now rejects execution of Update queries. (Duh!)

Also caches any rejection based on lack of the correct columns, so attempts to DoS your server by calling inappropriate queries will be short-circuited.

New module file, for Ignition v8.1 only, ~~here. Prior file removed.~~

Docs updated in place.

I’ll call this one a beta. I’d appreciate reports on any failure to honor security restrictions.

{ Edited to remove stale link. Keep scrolling down. (: }

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [April 4, 2022, 9:48pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/4 "2022-04-04T21:48:47Z")

</div>

Ah, well. It was not actually running off Perspective security. It was looking at the gateway web interface’s user. /:

Another beta ~~here~~.

(I had to make it depend on Perspective to access the correct session info–this is not going to be a general purpose tool.)

{ Edited to remove stale link. Keep scrolling down. (: }

---

<div class="post-metadata">

**Author:** ![Rusty](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/rusty/32/19859_2.png) [@Rusty](https://forum.inductiveautomation.com/u/Rusty)\
**Post date:** [April 12, 2022, 3:11pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/5 "2022-04-12T15:11:10Z")

</div>

Hi, Would this work for Vision too?

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [April 12, 2022, 3:42pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/6 "2022-04-12T15:42:35Z")

</div>

No, but it isn’t necessary. Vision can directly call a named query and pass the resulting raw bytes to the desired front-end component. (PDF Viewer, Paintable Canvas, etc.)

Can even be the same named queries defined for the Blob Server.

---

<div class="post-metadata">

**Author:** ![Rusty](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/rusty/32/19859_2.png) [@Rusty](https://forum.inductiveautomation.com/u/Rusty)\
**Post date:** [April 12, 2022, 5:34pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/7 "2022-04-12T17:34:20Z")

</div>

Hey,

That sounds great, in my case the images are already saved as blobs into a DB. Do you know where I can find guidance on how to pass that data into a paintable canvas? I can create a DB query to get to the cell containing the blob data, for example via query tag of type Dataset, but what then? How do I pass the “raw bytes” to the canvas?

Thanks

---

<div class="post-metadata">

**Author:** ![josborn](https://avatars.discourse-cdn.com/v4/letter/j/4bbf92/32.png) [@josborn](https://forum.inductiveautomation.com/u/josborn)\
**Post date:** [April 12, 2022, 5:38pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/8 "2022-04-12T17:38:41Z")

</div>

This topic may be of some help:

> [@Database and Paintable Canvas Refresh](https://forum.inductiveautomation.com/t/database-and-paintable-canvas-refresh/21865):
>
> My application is visualizing images from Database. I am using Paintable Canvas to view images, but the image doesn´t refresh when I selected registers continuously from database table . Here is my code in Paintable Canvas: from javax.imageio import ImageIO from [java.io](http://java.io) import ByteArrayInputStream bytes = event.source.getClientProperty(“img-bytes-cached-name”) id = event.source.parent.parent.getComponent(‘Documents’).getComponent(‘Documents’).id blob = system.db.…

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [April 20, 2022, 8:48pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/9 "2022-04-20T20:48:53Z")

</div>

I decided to make this a free module, like the venerable Simulation Aids.

For Ignition v8.1 only, [Release v1.0.0](https://www.automation-pros.com/ignition/Blob%20Serve-1.0.0.221102039-v81.modl).

FWIW, dropping the license checks reduced this to a total of 352 lines of java. It didn’t feel right charging for such a tiny thing.

As with Simulation Aids, support is here on the forum or by email, on an as-available basis.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [April 20, 2022, 9:01pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/10 "2022-04-20T21:01:17Z")

</div>

If anyone is disappointed that they can’t **pay** for this module, there’s always the tip jar link in my profile. 😁

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [April 20, 2022, 9:01pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/11 "2022-04-20T21:01:21Z")

</div>

> [@pturmel](#):
>
> It didn’t feel right charging for such a tiny thing.

On the one hand...

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/7/b/7bf7cfec2747c091e5f287326cb473078d53b5df.jpeg)

On the other hand...

> **[The Best Code is No Code At All](https://blog.codinghorror.com/the-best-code-is-no-code-at-all/)**
>
> Rich Skrenta writes that code is our enemy
> \[http://www.skrenta.com/2007/05/code\_is\_our\_enemy.html\].
> 
> \> Code is bad. It rots. It requires periodic maintenance. It has bugs that need to
> be found. New features mean old code has to be adapted. The...

---

<div class="post-metadata">

**Author:** ![jgooding](https://avatars.discourse-cdn.com/v4/letter/j/a88e4f/32.png) [@jgooding](https://forum.inductiveautomation.com/u/jgooding)\
**Post date:** [April 21, 2022, 1:46pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/12 "2022-04-21T13:46:08Z")

</div>

Maybe our friends at IA could incorporate this in the main code (Paul could you license it to them?). My IT department gets all frustrated when they hear the WebDev module. What you are not using MS tools to develop a website? I really want to run IIS for my backend with [ASP.NET](http://ASP.NET).

---

<div class="post-metadata">

**Author:** ![bkarabinchak.psi](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bkarabinchak.psi/32/83567_2.png) [@bkarabinchak.psi](https://forum.inductiveautomation.com/u/bkarabinchak.psi)\
**Post date:** [April 21, 2022, 1:54pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/13 "2022-04-21T13:54:14Z")

</div>

Thanks for a free module that solves a class of problems. I was just needing this exact sort of thing!

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [April 21, 2022, 1:57pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/14 "2022-04-21T13:57:15Z")

</div>

> [@jgooding](#):
>
> Paul could you license it to them?

Paul?

Like with Simulation Aids, I release things for free as marketing for my services and skill set. And to break down resistance to installing my 3rd-party modules in general.

So, no, not at this time.

{ Not that IA can't replicate it themselves in a trice. But they generally don't stomp on their developers' products. }

---

<div class="post-metadata">

**Author:** ![bkarabinchak.psi](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bkarabinchak.psi/32/83567_2.png) [@bkarabinchak.psi](https://forum.inductiveautomation.com/u/bkarabinchak.psi)\
**Post date:** [April 21, 2022, 1:59pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/15 "2022-04-21T13:59:03Z")

</div>

> [@pturmel](#):
>
> And to break down resistance to installing my 3rd-party modules in general.

🙌

Doing Gods work. I got some people at my job using Simulation Aids and I think it has opened the doors.

---

<div class="post-metadata">

**Author:** ![ryoungk](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryoungk/32/24205_2.png) [@ryoungk](https://forum.inductiveautomation.com/u/ryoungk)\
**Post date:** [August 4, 2022, 7:52pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/16 "2022-08-04T19:52:28Z")

</div>

Am I setting this up correctly?  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/8/6/86cfeaa92f89b2ff4b6398ce09f6ba8b688ce0dd.png)

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/1/8/1894fd4ac2d7b15ef398ed5c7a1c4252882d169c.png)

Where would I paste this URL into the application to display on an Image component? In the HTTP binding? It’s not liking that setup for me. I feel I may be missing something.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 4, 2022, 8:03pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/17 "2022-08-04T20:03:52Z")

</div>

> [@ryoungk](#):
>
> Am I setting this up correctly?

Looks good.

> [@ryoungk](#):
>
> Where would I paste this URL into the application

Include the image id in your table data. In the cell view that will be configured for that column, that id will be passed as `params.value`. Bind `props.source` of the image component in that view to an expression that assembles the complete URL with that ID.

---

<div class="post-metadata">

**Author:** ![ryoungk](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryoungk/32/24205_2.png) [@ryoungk](https://forum.inductiveautomation.com/u/ryoungk)\
**Post date:** [August 11, 2022, 1:52pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/18 "2022-08-11T13:52:51Z")

</div>

I think I have this set up correctly but the image is not showing up and the logs are showing the following messages.  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/b/8/b8fd40b76877d6cadd419d81a237e7fa2b4884e9.png)

Any ideas?

---

<div class="post-metadata">

**Author:** ![victordcq](https://avatars.discourse-cdn.com/v4/letter/v/f6c823/32.png) [@victordcq](https://forum.inductiveautomation.com/u/victordcq)\
**Post date:** [August 11, 2022, 2:44pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/19 "2022-08-11T14:44:14Z")

</div>

uri is to large, seems like to much is send over the http request

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 11, 2022, 3:11pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/20 "2022-08-11T15:11:55Z")

</div>

Then you are obviously not generating a simple URL with an appended ID value. Are you appending the base64 instead? (You don’t need that column in your table dataset at all when you are going to have the cell views’ image component fetch the blob.)

[Next page](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970.md?page=2)
