# 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:** 5

<div class="post-metadata">

**Author:** ![Yousef\_Ali](https://avatars.discourse-cdn.com/v4/letter/y/87869e/32.png) [@Yousef\_Ali](https://forum.inductiveautomation.com/u/Yousef_Ali)\
**Post date:** [May 17, 2024, 9:22am UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/81 "2024-05-17T09:22:17Z")

</div>

Thanks 😆

---

<div class="post-metadata">

**Author:** ![Francisco\_Ochoa](https://avatars.discourse-cdn.com/v4/letter/f/e495f1/32.png) [@Francisco\_Ochoa](https://forum.inductiveautomation.com/u/Francisco_Ochoa)\
**Post date:** [July 31, 2024, 6:47pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/82 "2024-07-31T18:47:33Z")

</div>

how i can get your module?

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [July 31, 2024, 6:49pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/83 "2024-07-31T18:49:15Z")

</div>

@Francisco_Ochoa scroll up a few comments and you'll see the download link

---

<div class="post-metadata">

**Author:** ![Francisco\_Ochoa](https://avatars.discourse-cdn.com/v4/letter/f/e495f1/32.png) [@Francisco\_Ochoa](https://forum.inductiveautomation.com/u/Francisco_Ochoa)\
**Post date:** [July 31, 2024, 7:11pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/84 "2024-07-31T19:11:53Z")

</div>

where is the link\> i didnt see it , if you can help me i will be very thankfully

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [July 31, 2024, 7:15pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/85 "2024-07-31T19:15:33Z")

</div>

It's literally 6 comments up from your post

[Automation Professionals' Blob Server Module - 3rd Party Modules - Inductive Automation Forum](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/74)

---

<div class="post-metadata">

**Author:** ![Francisco\_Ochoa](https://avatars.discourse-cdn.com/v4/letter/f/e495f1/32.png) [@Francisco\_Ochoa](https://forum.inductiveautomation.com/u/Francisco_Ochoa)\
**Post date:** [August 1, 2024, 3:51pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/86 "2024-08-01T15:51:16Z")

</div>

how its work? how can i install it?

---

<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 1, 2024, 3:52pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/87 "2024-08-01T15:52:04Z")

</div>

Have you read this entire topic? And the documentation linked in the first comment? Do that first.

Quick link to comment #1:

> [@Automation Professionals' Blob Server Module](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970):
>
> 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 documentati…

---

<div class="post-metadata">

**Author:** ![Francisco\_Ochoa](https://avatars.discourse-cdn.com/v4/letter/f/e495f1/32.png) [@Francisco\_Ochoa](https://forum.inductiveautomation.com/u/Francisco_Ochoa)\
**Post date:** [August 1, 2024, 6:09pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/89 "2024-08-01T18:09:22Z")

</div>

![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/3/a/3a0dbc033ed7f433eb43f08f123fcdd2199d01b8.png)  
i dont have idea what more i need to do , i never used Named Queries

---

<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 1, 2024, 6:49pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/90 "2024-08-01T18:49:15Z")

</div>

I don't recognize that screenshot. (SSMS?)

Don't use SSMS for this.

Do you have blobs loaded into your database yet? If not, do that first.

Meanwhile, review all of the NQ videos in the university:

> **[Named Query Introduction Video at Inductive University](https://www.inductiveuniversity.com/videos/named-query-introduction/8.1)**
>
> Take a quick tour of the Named Query workspace.

---

<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:** [August 1, 2024, 6:55pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/91 "2024-08-01T18:55:41Z")

</div>

> [@pturmel](#):
>
> I don't recognize that screenshot.

That's the "query builder" that's included in the Designer, which attempts to provide a graphical builder for SQL queries.

@Francisco_Ochoa drop out of that. It's worse than a crutch - it's a "mobility aid" that will actively cause you harm. The SQL involved to use Phil's module here is not complicated, and you'll be better off learning it properly.

---

<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 1, 2024, 6:57pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/92 "2024-08-01T18:57:55Z")

</div>

> [@paul-griffith](#):
>
> attempts to provide a graphical builder for SQL queries.

Huh. Never noticed that. Wouldn't have used it if I had. 🤷‍♂️

---

<div class="post-metadata">

**Author:** ![jmath](https://avatars.discourse-cdn.com/v4/letter/j/f19dbf/32.png) [@jmath](https://forum.inductiveautomation.com/u/jmath)\
**Post date:** [August 16, 2024, 3:25pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/93 "2024-08-16T15:25:56Z")

</div>

This will be a great tool if I can get it working, thanks for your contribution!

I'm hoping for some pointers. All I am able to get when testing the url in chrome is a broken image icon:  
 ![result](https://us1.discourse-cdn.com/inductiveautomation/original/3X/7/4/744e88f1b8fd6d3cbe41ebb1bbbab32e2e27b0a3.png)

When I check the gateway logs (assuming I'm looking in the correct place, I'm still learning), I'm not seeing any info RE blob server except when I start/restart the module. There were also no messages in console of chrome. I feel I'm missing something simple...I've tried several different variations to column type, the INSERT statement, etc., to no avail.

**Table T-SQL:**

```python
CREATE TABLE [dbo].[parts](
	[PartNumber] [varchar](20) NOT NULL,
	[image] [varbinary](max) NULL,
 CONSTRAINT [PK_parts] PRIMARY KEY CLUSTERED 
(
	[PartNumber] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

```

  

**Test record INSERT T-SQL:**  
I don't currently have access to perform BULK operations, so I encoded a test image to base64 using Python and performed my insert like this (simple smiley image)

```python
INSERT INTO [parts] (PartNumber,image) VALUES ('smile',CONVERT(varbinary(max),'data:image/png;base64,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'))

```

**My NQ:**  
 ![NQ Authoring](https://us1.discourse-cdn.com/inductiveautomation/original/3X/8/f/8f8c738f9915cb13110a630f13496bc999994be6.png)

![NQ Testing](https://us1.discourse-cdn.com/inductiveautomation/original/3X/b/7/b73f0baad712747246182103eb8d6baa0da25d35.png)  
_edit: I just noticed every run in testing produces random "Content" value_

---

<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 16, 2024, 4:35pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/94 "2024-08-16T16:35:12Z")

</div>

You should not be using `CONVERT` when inserting images to the DB. Use a "prep" insert or named query where the image file bytes are passed in true binary format into the table. The SQL would look like:

```python
INSERT INTO parts (PartNumber, image) VALUES (?, ?)

```

with the name and bytes supplied as parameters.

---

<div class="post-metadata">

**Author:** ![jmath](https://avatars.discourse-cdn.com/v4/letter/j/f19dbf/32.png) [@jmath](https://forum.inductiveautomation.com/u/jmath)\
**Post date:** [August 16, 2024, 7:50pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/95 "2024-08-16T19:50:48Z")

</div>

> [@pturmel](#):
>
> You should not be using `CONVERT` when inserting images to the DB. Use a "prep" insert or named query where the image file bytes are passed in true binary format into the table

I was using an old Python script to encode images to base64, so when I attempted to `INSERT`, SSMS suggested `CONVERT` to turn that long piece of encoded text into a `varbinary(max)`. I threw `CONVERT` in there which satisfied the query, but was not the correct way to handle it as you pointed out. I had a feeling the `INSERT` wasn't right but couldn't figure out why, makes sense now 🤦‍♂️. Your "prep" comment confused me at first as I was only using SSMS for the `INSERT`, but I got it now so thank you!

FYI, what I used to `INSERT` image to table:

```python
query = 'INSERT INTO parts (PartNumber,image) VALUES (?,?)'
partnum = 'smile'
picfile = system.file.readFileAsBytes('C:/temp/smile.png')
system.db.runPrepUpdate(query, [partnum,picfile], 'IGN_DB')

```

---

<div class="post-metadata">

**Author:** ![e\_l](https://avatars.discourse-cdn.com/v4/letter/e/9de0a6/32.png) [@e\_l](https://forum.inductiveautomation.com/u/e_l)\
**Post date:** [October 15, 2024, 3:18pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/96 "2024-10-15T15:18:32Z")

</div>

I’m trying to use the Blob Server Module ver 1.1.0 (b231421939) to retrieve a PDF from a Sql Server table and display it using a perspective link component. The Named query testing tool has no problem retrieving the PDF, but I cannot get any browser to retrieve the document.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/d/c/dcec0fd0c180a2cbbe5eb9c2756a59fe9efd7ba5.png)

Using numerous variants of this url only generates a 404 error…

`<correct gw designation here>`/system/blob/HelpPdfTest-T67/HelpPdfTest\_2?file\_id="Check Scale.pdf"

`<correct gw designation here>`/system/blob/HelpPdfTest-T67/HelpPdfTest\_2?file\_id=Check#20Scale.pdf

`<correct gw designation here>`/system/blob/HelpPdfTest-T67/HelpPdfTest\_2?file\_id=Check Scale.pdf

**HTTP ERROR 404 Not Found**

| **URI:** | /system/blob/HelpPdfTest-T67/HelpPdfTest\_2 |
| --- | --- |
| **STATUS:** | 404 |
| **MESSAGE:** | Not Found |

There are no seemingly relevant messages in the gateway log.

Tried numerous things including …

- Different gateways
- Different Browsers
- Different PDFs
- Different file ids (with and without spaces etc.)
- And just in case…
  - Using Integer ID
  - Renaming each individual object one at a time

- etc…

Any ideas?

---

<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:** [October 15, 2024, 3:26pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/97 "2024-10-15T15:26:30Z")

</div>

Encode spaces with `%20`, not `#20`. Might need to encode the hyphen in your project name. Do not include quotes around your string parameters.

(Use [java.net.URLEncoder](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/URLEncoder.html#encode(java.lang.String,java.nio.charset.Charset)) on each string parameter to ensure it is done correctly.)

Also, do you have permissions on the NQ?

Also, is the project a **leaf** project? And **enabled**?

Are you sure your DB is returning a BLOB column (you should not see string content when testing) ?

---

<div class="post-metadata">

**Author:** ![e\_l](https://avatars.discourse-cdn.com/v4/letter/e/9de0a6/32.png) [@e\_l](https://forum.inductiveautomation.com/u/e_l)\
**Post date:** [October 15, 2024, 3:44pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/98 "2024-10-15T15:44:43Z")

</div>

Thanks for the quick reply.  
Yep. #20 was a brain fart. %20 does same. It doesn't seem to care about the space.  
Nope. No permissions on the NQ (zone and role are "Any").  
I'll check out URLEncoder shortly.

---

<div class="post-metadata">

**Author:** ![e\_l](https://avatars.discourse-cdn.com/v4/letter/e/9de0a6/32.png) [@e\_l](https://forum.inductiveautomation.com/u/e_l)\
**Post date:** [October 15, 2024, 3:50pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/99 "2024-10-15T15:50:13Z")

</div>

Test project is tiny, stand-alone, and enabled.  
Not sure about blob. We tried both varchar(MAX) and varbinary(MAX) as column type. Maybe I need a bit of education here.

---

<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:** [October 15, 2024, 3:51pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/100 "2024-10-15T15:51:17Z")

</div>

varchar is definitely wrong. varbinary should work. Don't cast it.

(Show your SQL)

---

<div class="post-metadata">

**Author:** ![e\_l](https://avatars.discourse-cdn.com/v4/letter/e/9de0a6/32.png) [@e\_l](https://forum.inductiveautomation.com/u/e_l)\
**Post date:** [October 15, 2024, 3:53pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/101 "2024-10-15T15:53:09Z")

</div>

```python
CREATE TABLE [dbo].[FILLER_HELP_FILES_TEST](
	[rec_id] [int] IDENTITY(1,1) NOT NULL,
	[file_id] [varchar](50) NOT NULL,
	[file_blob] [varchar](max) NOT NULL,
	[id] [int] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

```

I'll switch back to varbinary in a little while.

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

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