Global Definitions for file upload
#############################################
#Global file definitions
#############################################
aspire.global-defaults.fileupload.MaxMemorySizeInKb=1000
aspire.global-defaults.fileupload.maxRequestSizeInMb=10
aspire.global-defaults.fileupload.tempDirectory=c:\\work
A multistep request to upload the file
#############################################
#Test File Upload
#############################################
request.DocFUL.classname=com.ai.data.PreTranslateArgsMultiRequestExecutor
request.DocFUL.request.1=DFUL.parsemultipart
request.DocFUL.request.2=DFUL.FULCopyFile
request.DocFUL.request=DFUL.savefileInDatabase
#redirect back to the display page
request.DocFUL.redirectURL=\
/akc/display?url=UploadMPURL&reportId={reportId}&ownerUserId={ownerUserId}
#step1: parse multipart using commons
request.DFUL.parsemultipart.classname=com.ai.parts.SingleFileUPloadCommonsPart
#The following is read but it is not used
#request.testFileUpload.fileUploadFormFieldName=datafile
#step2: Copy file using the preddefined part FULCopyFilePart
request.DFUL.FULCopyFile.classname=com.ai.parts.FULCopyFilePart
request.DFUL.FULCopyFile.targetDirectory=\
c:\\work\\testdir\\{profile_user}\\documentfiles\\{reportId}
request.DFUL.FULCopyFile.filename={{datafile_filename}}
request.DFUL.FULCopyFile.fileuploadFormFieldName=datafile
#step3: Save file name, size etc, in database for better manipulation
request.DFUL.savefileInDatabase.classname=com.ai.db.DBRequestExecutor2
request.DFUL.savefileInDatabase.db=reportsDB
request.DFUL.savefileInDatabase.query_type=update
request.DFUL.savefileInDatabase.stmt=\
insert into file_attachments (\
file_id \
,filename \
,filesize \
,owner_user_id \
,last_updated_by \
,last_updated_on) \
values(\
{reportId} \
,{datafile_filename.quote} \
,{datafile_filesize} \
,{profile_user.quote} \
,{profile_user.quote} \
,Now() \
)
Here is the display page to list files uploaded
###################################
# UploadMPURL: reportId, ownerUserId
###################################
#basics
UploadMPURL=aspire:\\reports\\upload\\upload-note-mp.html
UploadMPURL.dataRequestName=GetFileItemWithAttachments
UploadMPURL.masterPageRequestName=GetMasterPage
#############################################
#GetFileItemWithAttachments(reportId)
#############################################
request.GetFileItemWithAttachments.className=\
com.ai.htmlgen.DBHashTableFormHandler1
#children specification for XML support
GetFileItemWithAttachments.loopnames=attachmentsloop
#this is needed to eliminate the table from being
#displayed when there is no data
GetFileItemWithAttachments.attachmentsloop.eliminateLoop=yes
request.GetFileItemWithAttachments.maindatarequest.className=\
com.ai.db.DBRequestExecutor2
request.GetFileItemWithAttachments.maindatarequest.db=reportsDB
request.GetFileItemWithAttachments.maindatarequest.stmt=\
\
select * \
from reports r, sql_statements st, filed_items fi, folders f \
where 1=1 \
and r.report_content_id = st.statement_id \
and r.report_id = {reportId} \
and r.report_id = fi.item_id \
and fi.folder_id = f.folder_id
#Retrieve the list of files
#see the select statement at the bottom of this section
request.GetFileItemWithAttachments.attachmentsloop.class_request.className=\
com.ai.htmlgen.GenericTableHandler6
request.GetFileItemWithAttachments.attachmentsloop.query_request.className=\
com.ai.db.DBRequestExecutor2
request.GetFileItemWithAttachments.attachmentsloop.query_request.db=reportsDB
request.GetFileItemWithAttachments.attachmentsloop.query_request.stmt=\
select * from file_attachments \
where file_id={reportId}
How you display the web form to upload
<form name="FileUploadForm" action="javascript:uploadFile()" method="POST"
enctype="multipart/form-data" method="post">
<input type="hidden" name="reportId" value="{{reportId}}"/>
<input type="hidden" name="ownerUserId" value="{{ownerUserId}}"/>
<input type="hidden" name="date"/>
<!-- file type -->
<p>
Choose your file
</p><p>
<input type="file" name="datafile" size="50"/>
</p>
<!-- submit -->
<p>
<input type="submit" value="attach"/>
</p>
</form>
How to display a table worth of files
Previous files
<!--RLF_TAG BGN_LOOP attachmentsloop -->
<p>{{aspire_rownum}}) {{filename}}, {{last_updated_on}}, {{last_updated_by}}</p>
<!--RLF_TAG END_LOOP attachmentsloop -->
How to display a message when there are no files
<!--RLF_TAG BGN_IF aspire.loops.attachmentsloop=false if2 -->
<p>No File Attachments Available for this document.</p>
<!--RLF_TAG END_IF aspire.loops.attachmentsloop=false if2 -->
The submit function
function uploadFile()
{
//alert("hello iam here");
var vAction = "/akc/update/DocFUL";
document.FileUploadForm.action=vAction;
document.FileUploadForm.submit();
//alert("submitted");
}
aspire - Friday, November 16, 2007 9:53:58 AM
Notice the directives for suppressing a table when there are no rows in it
#children specification for XML support GetFileItemWithAttachments.loopnames=attachmentsloop #this is needed to eliminate the table from being #displayed when there is no data GetFileItemWithAttachments.attachmentsloop.eliminateLoop=yes
You need to do this only if you are using aspire transforms. These are not that relevent if you are using Jsp or xslt.
aspire - Friday, November 16, 2007 9:54:16 AM
Also see the "aspire_rownum" for painting the numbers
Also see the "aspire_rownum" for painting the numbers
aspire - Friday, November 16, 2007 9:56:45 AM
The name of the form field of type "file" place an important part
If the name is "datafile", then the following keys are available in the hashtable:
datafile -> the fileitem object of commons datafile_filename -> name of the file the user entered datafile_filesize -> size of the file
aspire - Friday, November 16, 2007 9:57:38 AM
See the source code of the parts for better explanation of their configurability
I will post them soon, otherwise you can see them in the jar as the jar files have source in them as well.