BLOB

Labels
AJAX(112) App Studio(7) Apple(1) Application Builder(245) Application Factory(207) ASP.NET(95) ASP.NET 3.5(45) ASP.NET Code Generator(72) ASP.NET Membership(28) Azure(18) Barcode(2) Barcodes(3) BLOB(18) Business Rules(1) Business Rules/Logic(140) BYOD(13) Caching(2) Calendar(5) Charts(29) Cloud(14) Cloud On Time(2) Cloud On Time for Windows 7(2) Code Generator(54) Collaboration(11) command line(1) Conflict Detection(1) Content Management System(12) COT Tools for Excel(26) CRUD(1) Custom Actions(1) Data Aquarium Framework(122) Data Sheet(9) Data Sources(22) Database Lookups(50) Deployment(22) Designer(177) Device(1) DotNetNuke(12) EASE(20) Email(6) Features(101) Firebird(1) Form Builder(14) Globalization and Localization(6) How To(1) Hypermedia(2) Inline Editing(1) Installation(5) JavaScript(20) Kiosk(1) Low Code(3) Mac(1) Many-To-Many(4) Maps(6) Master/Detail(36) Microservices(4) Mobile(63) Mode Builder(3) Model Builder(3) MySQL(10) Native Apps(5) News(18) OAuth(8) OAuth Scopes(1) OAuth2(11) Offline(20) Offline Apps(4) Offline Sync(5) Oracle(10) PKCE(2) PostgreSQL(2) PWA(2) QR codes(2) Rapid Application Development(5) Reading Pane(2) Release Notes(180) Reports(48) REST(29) RESTful(29) RESTful Workshop(15) RFID tags(1) SaaS(7) Security(80) SharePoint(12) SPA(6) SQL Anywhere(3) SQL Server(26) SSO(1) Stored Procedure(4) Teamwork(15) Tips and Tricks(87) Tools for Excel(2) Touch UI(93) Transactions(5) Tutorials(183) Universal Windows Platform(3) User Interface(338) Video Tutorial(37) Web 2.0(100) Web App Generator(101) Web Application Generator(607) Web Form Builder(40) Web.Config(9) Workflow(28)
Archive
Blog
BLOB
Monday, April 29, 2013PrintSubscribe
Overview of Upload/Download Adapters

Large files are frequently stored in databases as BLOB fields (binary large objects). Code On Time offers out-of-the-box support for upload and download of content directly to BLOB table columns. However, common practice is to store the binary content outside of the database. There are numerous advantages to this approach:

  • Reduced database size
  • Simplified backup
  • Low cost of storing large amounts of data
  • Opportunity to create a content delivery network (CDN)

File System

The most common method to store external files is in the file system. The files can be saved on the same hard drive of the host machine, or on an external Network-Attached Storage (NAS) device. While these devices are simple to configure, they still will require maintenance to ensure redundancy and performance.

Azure Storage

Microsoft Azure Storage cloud platform is a high-redundancy and availability solution that stores all data in data centers managed by Microsoft. It offers geo redundant storage, affinity groups, and logging. Each storage account can open multiple “containers” that are accessed via HTTP requests using unique container keys. Containers may be declared as “public” if necessary.

Amazon S3

Amazon Simple Storage Service (Amazon S3) is another popular cloud solution that offers features similar to Microsoft Azure Storage. It offers data redundancy and high availability, enabling rapid scaling of application infrastructure. Each account can create multiple buckets to store data, which are accessed via HTTP requests using one or more “Secret Access Keys”.

Configuring an Upload/Download Adapter

Declare virtual BLOB fields by entering a few parameters in the BLOB Adapter Configuration of a data controller. The web application framework will perform REST requests to a specified storage system, making it possible to use any combination of adapters in a single application without creating dependencies on third-party libraries.

A physical table column storing the file name is required for each virtual BLOB field definition. It allows the application framework  to determine existence of binary content.

Optional utility table columns Length and Content Type may be specified. The matching data controller fields will enable the application framework to communicate the file type and size to the client browser.

The table below shows configuration parameters that may be used to set up an adapter.

Parameter Description Storage System
Access-Key-ID The Access Key ID of the specified Secret Access Key required to form secure requests to Amazon S3. S3
Account Name of the Azure Storage Account. Azure
Bucket The bucket that stores the binary content. S3
Container The container that stores the binary content. Azure
Content-Type-Field The name of the data controller field that stores the file content type (data type String). Optional
Field The name of the virtual BLOB field. Required
File-Name-Field The name of the field that stores the file name (data type String). Required
Key The key used to authenticate Azure Storage requests. Azure
Length-Field The name of the data controller field that stores the file length (data type Int). Optional
Path-Template The path to the binary content in the storage system. May include references to data controller field names and special names. Required
Storage-System The type of storage system that holds the binary content. Supported values are “File”, “Azure”, and “S3”. Required
Secret-Access-Key The Secret Access Key used in conjunction with Access Key ID to form secure requests to Amazon S3. S3

Configuring Path Template

The path template can reference data controller field names in curly brackets ({}). The following example references the data controller fields ProductID and PictureFileName. This path template will work with Azure and S3 storage systems.

Path-Template: Products/{ProductID}-{PictureFileName}

The file system path template must resolve as a physical path in the file system.

Path-Template: C:\Northwind\Customers\{CustomerID}-{PhotoFileName}

You can also specify a path relative to the application root when using file system storage.

Path-Template: ~\App_Data\Customers\{CustomerID}-{PhotoFileName}

Special names $Extension and $FileNameWithoutExtension can also be used in the path template with any storage system.

Path-Template: Products/{$FileNameWithoutExtension}-{ProductID}.{$Extension}

Most hosted storage systems (Azure, S3, Google Drive) are only supporting a limited set of characters in the path. The application framework will automatically replace non-alphanumeric characters with dash (-) when evaluating path templates.

Saturday, April 27, 2013PrintSubscribe
File System Upload/Download Adapter

A local or remote file system is the most common method to store large binary content. Let’s implement a customer photo field in the Northwind database. Several utility fields in the Customers table will store file name, size, and type. The file itself will be stored in a specified folder location.

Adding Utility Fields to the Database

Start SQL Server Management Studio. In the Object Explorer, right-click on Databases / Northwind / dbo.Customers and press Design.

Designing the Customers table of Northwind database.

Add the following columns:

Column Name Data Type Allow Nulls
PhotoFileName nvarchar(250) yes
PhotoLength int yes
PhotoContentType nvarchar(50) yes

Save the changes to the table.

Start the web application generator. Click on the project name, and press Refresh. Check the box next to Customers controller and proceed to refresh the web app.

Refreshing the Customers table.

Configuring BLOB Field

Start the Project Designer. In the Project Explorer, switch to the Controllers tab. Right-click on Customers / Fields node and press New Field.

Creating a new field in Customers controller.

Assign the following values:

Property Value
Name Photo
Type Byte[]
Allow null values. yes
Value is retrieved on demand yes
Source Fields CustomerID
On Demand Handler CustomerPhotoHandler
On Demand Style Thumbnail
Label Photo

Save the field. Drag the new field node onto Customers / Views / editForm1 to instantiate a data field in the view.

Dropping the 'Photo' field node onto view 'editForm1'.     Photo data field instantiated in view editForm1.

Use the same technique to create a data field in view grid1 as well.

Next, double-click on the Customers controller node. Enter the following in BLOB Adapter Configuration.

BLOB Adapter Configuration

Field: Photo
Storage-System: File
Path-Template: C:\Northwind\Customers\{CustomerID}-{PhotoFileName}

Press OK to save changes.

Viewing the Results

On the toolbar, press Browse. Navigate to the Customers page and start editing a record. The new Photo field will accept file uploads. Click on the link and upload a file. The bar at the top of the screen will show a confirmation of upload and a thumbnail of the picture will be displayed. The File Name, Length, and Content Type utility fields will be updated accordingly.

Uploading a picture to Photo field in Customers controller.

The files can be seen in File Explorer.

The uploaded files are stored in the specified folder.

To upload files larger than 4 MB, you will need to increase the application upload size limit.

Thursday, April 25, 2013PrintSubscribe
Amazon S3 Upload/Download Adapter

Amazon Simple Storage Service (Amazon S3) is a cloud-based data storage solution. Let’s add fields to the Suppliers table in the Northwind database in order to store company logos. The picture file name, size, and content type will be saved in the database, while the files will be uploaded to S3.

Setting Up S3

Navigate to http://aws.amazon.com/s3 and log in to your account. If you do not have an active account for Amazon S3, sign up for AWS Free Usage Tier.

When logged into the AWS Management Console, select S3 under Storage & Content Delivery section. Click on Create Bucket.

Creating a bucket in Amazon S3.

Enter a bucket name and press Create.

Naming and creating the bucket.

When complete, click on the account name in the top right corner and select Security Credentials. Scroll down to Access Keys section. If necessary, create a new access key. Click on Show under Secret Access Key and save both the Secret Access Key and Access Key ID for later use.

Getting the access key for Amazon S3.

Adding Utility Fields to the Database

Start SQL Server Management Studio. In the Object Explorer, right-click on Databases / Northwind / Tables / dbo.Suppliers, and press Design.

Designing the Suppliers table.

Add the following columns:

Column Name Data Type Allow Nulls
LogoFileName nvarchar(250) yes
LogoLength int yes
LogoContentType nvarchar(50) yes

Save the changes. Switch to the generator and click on the project name. Select Refresh, check the box next to Suppliers controller, and proceed to refresh the web app.

Refreshing the Suppliers controller.

Configuring BLOB Field

Start the Project Designer. In the Project Explorer, switch to the Controllers tab. Right-click on Suppliers / Fields node, and press New Field.

Creating a new field for Suppliers controller.

Assign the following properties:

Property Value
Name Logo
Type Byte[]
Allow Null Values yes
Value is retrieved on demand yes
Source Fields SupplierID
On Demand Handler LogoBlobHandler
On Demand Style Thumbnail
Label Logo

Save the field. Drag the new field node and drop it onto Suppliers/ Views / editForm1 to instantiate the field as a data field in the editForm1 view.

Adding a data field of Logo to view 'editForm1'.     Logo data field added.

Drag the field onto view grid1 to display the picture in the list of products.

Next, double-click on the Suppliers controller node. Enter the following in BLOB Adapter Configuration.

BLOB Adapter Configuration

Field: Logo
Storage-System: S3
Access-Key-ID: AKIAJASDFSHLPC4B7P6Q
Secret-Access-Key: lNFaASDFyosrjY3j77ASDFCUTHj408Pgz5yoCci
Bucket: northwind
Path-Template: {SupplierID}-{LogoFileName}

Note that the values above are not functional. Replace the highlighted parts with your own settings.

Make sure to save the controller.

Viewing the Results

On the toolbar, press Browse. Navigate to the Suppliers page and start editing a record. The new Logo field will accept file uploads. Click on the link and upload a file. The bar at the top of the screen will show a confirmation of upload and a thumbnail of the picture will be displayed. The File Name, Length, and Content Type utility fields will be updated accordingly.

Image uploaded to Amazon S3 and thumbnail is displayed.

The files can be seen in AWS Management Console.

Files uploaded to Amazon S3.

To upload files larger than 4 MB, you will need to increase the application upload size limit.