BLOB to store IFS files

Use this board to ask questions or have discussions with other Rich Displays users.
Post Reply
gbroggi
New User
Posts: 6
Joined: Wed May 14, 2014 5:27 am
First Name: Giovanni
Last Name: Broggi
Company Name: Arturo Salice SPA
Country: Italy
Contact:

BLOB to store IFS files

Post by gbroggi »

Hello there,

maybe as many of you I'm building an application to upload and download PC files to the iSeries, but I would like to store data into a database table instead of the IFS.
I created a phisical file named ATTACH0F with a simple record format:

ATID - DECIMAL (15,0) Primary key
ATTITLE - Attachment Title
ATFILE - File name. Example /tmp/items.xls
ATBLOB - binary large object to store file

My RPG program shows a grid listing ATTACH0F contents, then you can choose to upload new files or download the ones listed:

Upload to server - If the user needs to add files I placed a button to shown the FileUpload widget to copy files into IFS, then my RPG takes those files and copy them into ATTACH0F and delete them from IFS once the copy is compled.

Download from server - On each grid (subfile) row I placed a button to download the file, but here comes the problem: I need to copy back the file from ATTACH0F into the IFS before using pui.download API.
How can I work it out when the user press the download button?

I hope the problem is clear enough. Thank you for comments

Giovanni
User avatar
David
Profound Logic Staff Member
Posts: 690
Joined: Fri Jan 04, 2008 12:11 pm
First Name: David
Last Name: Russo
Company Name: Profound Logic Software
Contact:

Re: BLOB to store IFS files

Post by David »

The "pui.download()" API works by calling an exit program that you write before downloading the file. The exit program can copy the file from the BLOB to the IFS, and then tell the download API where the IFS file is. It can even clean up the IFS file afterward.

See here:

http://www.profoundlogic.com/docs/displ ... DNLEXIT%29

This is called twice for each download. Once before the download, and once after the download. The 'timing flag' parameter tells you which one it is. When the exit program is called before the download, it can copy the BLOB contents to a temporary IFS file, and then it can set the 'ifs directory' and 'ifs stream file' parameters to tell the downloader where the file is located. The downloader will then output the file to the web browser. It will then call the exit program again, which can look at the 'timing flag' and delete the temporary IFS file.
gbroggi
New User
Posts: 6
Joined: Wed May 14, 2014 5:27 am
First Name: Giovanni
Last Name: Broggi
Company Name: Arturo Salice SPA
Country: Italy
Contact:

Re: BLOB to store IFS files

Post by gbroggi »

Thank you David.

The pui.download "id" attribute rapresents the file name to download and it's passed as input to the exit program; but in my scenario the database file primary key is an anonymous counter and not the file name. Please see attached file.
ATTACH0F.xlsx
(10.9 KiB) Downloaded 436 times
If I code something like pui.download(id: items.xls) I won't be able to access my table ATTACH0F
I need to chain the database file by ATID field, copy the blob contents to a work directory and then activate the download.


Giovanni
Scott Klement
Experienced User
Posts: 2711
Joined: Wed Aug 01, 2012 8:58 am
First Name: Scott
Last Name: Klement
Company Name: Profound Logic
City: Milwaukee
State / Province: Wisconsin

Re: BLOB to store IFS files

Post by Scott Klement »

The id doesn't need to be a filename. It can be any value you want to pass between your display file (where you're calling the pui.download API) and the exit program.

In your case, I'd think you'd want to put the ATID field in the id. The exit program can then use this to get the data out of the blob and put it into a temp file in the IFS. Then you can download that file, and delete it when it's finished.
gbroggi
New User
Posts: 6
Joined: Wed May 14, 2014 5:27 am
First Name: Giovanni
Last Name: Broggi
Company Name: Arturo Salice SPA
Country: Italy
Contact:

Re: BLOB to store IFS files

Post by gbroggi »

Thank you Scott, I'll try.

In my opinion it's better to keep all information into database tables because of a better data integrity. It sounds strange to me having a file recording for example customer invoices coming from the ERP and the related documents (pdf, doc, etc..) on the file system.
That's why I'm doing this way and the pui.download() is a workaround. In fact I'd prefer to have something to copy immediately into a database file instead of transit from IFS.

Regards
Giovanni
Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests