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

<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:56pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/102 "2024-10-15T15:56:08Z")

</div>

After you switch back to varbinary, make sure whatever inserts into the table pushes **bytes** , not a string.

---

<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, 4:06pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/103 "2024-10-15T16:06:57Z")

</div>

This is what was used to populate the table...

```python
INSERT INTO [dbo].[FILLER_HELP_FILES_TEST]
           ([file_id]
           ,[file_blob])
		SELECT 'Check Scale.pdf'
           ,BulkColumn
		FROM 
			OPENROWSET(BULK 'C:\Projects\CRI\Fillers\CLX\Ignition\HelpFiles-Filler\Check Scale.pdf', SINGLE_BLOB)
		AS BLOB;

```

---

<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, 4:13pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/104 "2024-10-15T16:13:00Z")

</div>

I have no idea how that SQL Server-specific function works, sorry.

A script like this in the designer would be typical:

```python
blob = system.file.readFileAsBytes("path/to/some/someName.pdf")
fname = "someName.pdf"
sql = """INSERT INTO some_table (file_id, file_blob) VALUES (?, ?)"""
print system.db.runPrepUpdate(sql, [fname, blob])

```

Should print `1` for the DB return value.

The NQ SQL should be just:

```python
SELECT 'application/pdf' AS "ContentType", file_blob AS "Content"
WHERE file_id = :file_id

```

---

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

</div>

Thanks

Varbinary column type made the content results in the NQ tester look a bit different, but still no joy in the browser.

I'll give your script a shot.

---

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

</div>

Except that it needs the table name 🙂

```python
SELECT file_blob as "Content", 'application/pdf' as "ContentType"
FROM FILLER_HELP_FILES_TEST
WHERE file_id = :file_id

```

---

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

</div>

I just remembered:

Make sure there's a unique index on `file_id`, since you aren't looking up by primary key. If the NQ yields more than one row, you get nothing.

---

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

</div>

Thank you.  
As an update, using `system.file.readFileAsBytes()` and `system.db.runPrepUpdate()` solved the problem. Apparently the sql server OPENROWSET() function, at least in the way that I used it, does not load the data in a manner that your module expects.  
Thanks so much for your module and support!

---

<div class="post-metadata">

**Author:** ![Lorenzo\_Noal](https://avatars.discourse-cdn.com/v4/letter/l/7ab992/32.png) [@Lorenzo\_Noal](https://forum.inductiveautomation.com/u/Lorenzo_Noal)\
**Post date:** [November 20, 2024, 1:52pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/109 "2024-11-20T13:52:18Z")

</div>

How can I 'clean-up' all the resources (URL) that module has created?  
Thank you.

---

<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:** [November 20, 2024, 6:47pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/110 "2024-11-20T18:47:05Z")

</div>

Delete the rows from your database. This module doesn't **create** any content. It just presents what you have in your DB. You put content there. You have to take it out.

---

<div class="post-metadata">

**Author:** ![Lorenzo\_Noal](https://avatars.discourse-cdn.com/v4/letter/l/7ab992/32.png) [@Lorenzo\_Noal](https://forum.inductiveautomation.com/u/Lorenzo_Noal)\
**Post date:** [November 21, 2024, 8:30am UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/111 "2024-11-21T08:30:57Z")

</div>

Thank you very much, I didn't notice that.

---

<div class="post-metadata">

**Author:** ![Eugene49](https://avatars.discourse-cdn.com/v4/letter/e/c6cbf5/32.png) [@Eugene49](https://forum.inductiveautomation.com/u/Eugene49)\
**Post date:** [January 10, 2025, 12:44am UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/112 "2025-01-10T00:44:10Z")

</div>

@pturmel I really love this module, really appreciate for inventing and sharing this. Really helps to access images, and pdf from database, by feeding required format url to a Image or iFrame component.

Important question.. If I am not using this module, how will I access images and pdf and feed it to an Image or Iframe component?

---

<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:** [January 10, 2025, 12:54am UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/113 "2025-01-10T00:54:39Z")

</div>

Use the WebDev module to run the NQs instead.

---

<div class="post-metadata">

**Author:** ![Melby\_Miraval](https://avatars.discourse-cdn.com/v4/letter/m/bc8723/32.png) [@Melby\_Miraval](https://forum.inductiveautomation.com/u/Melby_Miraval)\
**Post date:** [June 9, 2025, 4:07pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/114 "2025-06-09T16:07:53Z")

</div>

Is this module still available? Thanks!

---

<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:** [June 9, 2025, 5:18pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/115 "2025-06-09T17:18:48Z")

</div>

The download link is in post #75 above, [Automation Professionals' Blob Server Module - 3rd Party Modules - Inductive Automation Forum](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/75)

---

<div class="post-metadata">

**Author:** ![Tburgess](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/tburgess/32/67018_2.png) [@Tburgess](https://forum.inductiveautomation.com/u/Tburgess)\
**Post date:** [July 3, 2025, 3:24am UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/116 "2025-07-03T03:24:35Z")

</div>

Just wanted to say thank you for making this module! Saved us a lot of time and headaches over here! Works perfectly!

---

<div class="post-metadata">

**Author:** ![Lynn\_Martineau](https://avatars.discourse-cdn.com/v4/letter/l/f1d935/32.png) [@Lynn\_Martineau](https://forum.inductiveautomation.com/u/Lynn_Martineau)\
**Post date:** [July 3, 2025, 1:18pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/117 "2025-07-03T13:18:09Z")

</div>

Ditto - quick and easy to start using and works great

---

<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:** [September 29, 2025, 8:26pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/118 "2025-09-29T20:26:14Z")

</div>

Automation Professionals is pleased to announce the production release of this Blob Server module for Ignition v8.3:

Blob Server [v1.1.0.252721936](https://www.automation-pros.com/ignition/Blob%20Serve-1.1.0.252721936-v83.modl) for Ignition v8.3.

This release is functionally identical the the corresponding v8.1 release:

Blob Server [v1.1.0.231421939](https://www.automation-pros.com/ignition/Blob%20Serve-1.1.0.231421939-v81.modl) for Ignition v8.1.

---

<div class="post-metadata">

**Author:** ![bwhite](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bwhite/32/7112_2.png) [@bwhite](https://forum.inductiveautomation.com/u/bwhite)\
**Post date:** [January 14, 2026, 3:23pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/119 "2026-01-14T15:23:47Z")

</div>

Do you have any plans for this to work in 8.3?

---

<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:** [January 14, 2026, 3:26pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/120 "2026-01-14T15:26:11Z")

</div>

See the comment just above yours.

---

<div class="post-metadata">

**Author:** ![bwhite](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bwhite/32/7112_2.png) [@bwhite](https://forum.inductiveautomation.com/u/bwhite)\
**Post date:** [January 14, 2026, 3:37pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-blob-server-module/57970/121 "2026-01-14T15:37:11Z")

</div>

Does it work with 8.3.2? I just upgraded a server to 8.3 from 8.1 and upgraded the Blob Server module and the module is still showing faulted. I did restart the gateway after upgrading your module.

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

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