As you know Image Uploader Flash sends files and additional metadata from client computers to server side in HTTP POST requests. This approach requires a server script to parse the received requests and handle uploaded data. Such script usually extracts files and additional data sent by clients and save them all to file system on a server or handle in some other way. Reading this topic you will learn how to create such scripts in general. Moreover, this topic presents sample upload scripts for the ASP, JSP, and ColdFusion platforms.
An HTTP POST request sent by Image Uploader Flash is not an RFC 1867 request, except when you configure Image Uploader Flash to send original files only.
The main complication of handling POST requests sent by Image Uploader Flash lies in the fact that these requests are not RFC 1867. The reason of this are the following Adobe Flash Player limitations:
Because of the specified limitations on the Adobe platform, if you setup Image Uploader Flash to create thumbnails, files and thumbnails will be sent as binary data and will not be recognized as files by a server platform. This topic provides the following information allowing you to overcome these limitations on server side:
As it is said in the topic introduction there is no standard method of saving uploaded files uploaded by Image Uploader Flash. However, there are two ways to get the files:
Let us consider these methods more closely.
Here you should use a filter which will preprocess an HTTP POST request and make it compatible with the RFC standard before the server upload script runs. After the request is adapted you can treat it as a standard RFC 1867 request and get all the information in the usual way. If your platform allows using JAVA programs as filters (like JSP, JSF or ColdFusion do) it is a good idea to use Aurigma Flash Upload Filter. You can find it in the ColdFusion\Binaries\
subfolder of the Image Uploader Flash installation folder (usually it is C:\Program Files\Aurigma\Image Uploader Flash 7.2.9\
). Later in this topic you will find examples of using Aurigma Flash Upload Filter under JSP and ColdFusion. For information about filters and how to use them, please, see your server platform documentation.
If your server platform does not support JAVA programs as filters you can implement your own filter based on a technology supported by your server. The basic concept of a filter is that the only difference between Image Uploader Flash and standard RFC 1867 requests is the name of filename parameter, which is called filenam_ in Image Uploader Flash requests. The code snippets below show this difference.
Here is a subpart header from an RFC 1867 request:
Content-Disposition: form-data; name="File0_0"; filename="095004.jpg" Content-Type: image/jpeg
The next header describes the same file, but this header is taken from an Image Uploader Flash request:
Content-Disposition: form-data; name="File0_0"; filenam_="095004.jpg" Content-Type: image/jpeg
In this case you do not need to preprocess requests. To save an uploaded file you should implement the following steps in your upload script:
FileX_0
request field, where X is an ordinal number of converter.You can also get additional information from the request fields, for the full list of fields see the POST Field Reference.
Here we consider the case when Image Uploader Flash is configured to send source files only. The configuration of Image Uploader Flash should be as follows:
var fu = $au.imageUploaderFlash({ id: 'Uploader1', converters: [ {mode: '*.*=SourceFile'} ] });
In this, and only this, case the request sent by Image Uploader Flash is a standard RFC 1867 request, so you can use usual for your platform components to get files, for instance:
All the server-side upload scripts considered in this topic is designed having in mind that Image Uploader Flash is configured to send SourceFile
as first converted file and Thumbnail
as the second one. The following code snippet shows such configuration:
var fu = $au.imageUploaderFlash({ id: 'Uploader1', converters: [ {mode: '*.*=SourceFile'}, {mode: '*.*=Thumbnail'} ] });
If you send some other set of converted files, the server scripts can be easily adapted to your configuration.
The upload script considered here parses received request and saves binary data uploaded in FileX_0
request fields as files. The script uses the following third-party classes: clsUpload and clsField; you can find instructions on how to get and use them in the ASP\Instruction.txt
file in the Image Uploader Flash installation folder (usually it is C:\Program Files\Aurigma\Image Uploader Flash 7.2.9\
). The clsUpload class retrieves multi-part form data posted to web page and returns it as a set of clsField instances (each one corresponds to a field in the request). Whereas the clsField class provides the SaveAs method, which saves field content as a binary file with the given name.
<%@ language="VBScript" %> <!--#INCLUDE FILE="clsUpload.asp"--> <% Server.ScriptTimeout = 450 'This variable specifies relative path to the folder, where the gallery with uploaded files is located. 'Do not forget to put a slash in the end of the folder name. Dim strGalleryPath strGalleryPath = "../Gallery/" ' Instantiate Upload Class Set objUpload = New clsUpload ' Grab the file name Dim strFileName, strPath strFileName = objUpload.Fields("SourceName_0").Value ' Save source file strPath = Server.MapPath(strGalleryPath & strFileName) objUpload("File0_0").SaveAs strPath 'Save thumbnail strPath = Server.MapPath(strGalleryPath & "Thumbnails/" & strFileName & ".jpg") objUpload("File1_0").SaveAs strPath ' Release upload object from memory Set objUpload = Nothing Response.Write("ok") %>
You can find full source code of this and other samples in the ASP\
subfolder of the Image Uploader Flash installation folder (usually it is C:\Program Files\Aurigma\Image Uploader Flash 7.2.9\
).
To preprocess an Image Uploader Flash request in JSP we recommend you to use Aurigma Flash Upload Filter. You can find the filter in the JSP\Binaries\
subfolder of the Image Uploader Flash installation folder (usually it is C:\Program Files\Aurigma\Image Uploader Flash 7.2.9\
). In order to utilize the filter you need to:
web.xml
file by adding the following code:
<filter> <description>Fix Aurigma Image Uploader Flash request</description> <filter-name>UploadFilter</filter-name> <filter-class>com.aurigma.imageuploaderflash.UploadFilter</filter-class> </filter> <filter-mapping> <filter-name>UploadFilter</filter-name> <url-pattern>/upload.jsp</url-pattern> </filter-mapping>
Aurigma.ImageUploaderFlash.jar
file to your web application.When an Image Uploader Flash request is adapted you can use any library to handle uploaded files: save files to disk, write additional data to database, or carry out any other operations.
Here we consider an open-source package called Jakarta Commons FileUpload. The package is developed by the Apache Software Foundation, and you can find the most recent version of FileUpload at the following location: http://jakarta.apache.org/commons/fileupload/.
Our upload script uses the following two classes belonging to the FileUpload package: DiskFileItemFactory and ServletFileUpload. The ServletFileUpload class handles multiple files per single HTML widget, using an instance of DiskFileItemFactory to determine how the data for individual parts is stored. When you call the parseRequest method of the ServletFileUpload class, it returns a list of FileItem class instances that represent uploaded files and POST fields. Finally, script saves uploaded files (an original file and its thumbnail) to the disk.
Pay attention that the script expects that Image Uploader Flash configuration is the same as the mentioned above.
<%@page import="org.xml.sax.SAXException"%> <%@page import="javax.xml.parsers.ParserConfigurationException"%> <%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%> <%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%> <%@page contentType="text/html" pageEncoding="UTF-8" language="java" import="java.io.*,java.util.*,javax.servlet.*,javax.servlet.http.*,org.apache.commons.fileupload.*,org.w3c.dom.*,org.w3c.dom.ls.*"%> <%! //This variable specifies relative path to the folder, where the gallery with uploaded files is located. //Do not forget to put a slash in the end of the folder name. String galleryPath = "Gallery/"; String absGalleryPath; String absThumbnailsPath; String absTempPath; %> <% //Process request. ServletContext context = getServletContext(); absGalleryPath = context.getRealPath(galleryPath); absThumbnailsPath = context.getRealPath(galleryPath + "/Thumbnails"); absTempPath = context.getRealPath(galleryPath + "/Temp"); // Create a factory for disk-based file items FileItemFactory factory = new DiskFileItemFactory(10240, new File(absTempPath)); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Parse the request List listFileItems = upload.parseRequest(request); //Put them in hash table for fast access. Hashtable fileItems = new Hashtable(); for (int i = 0; i < listFileItems.size(); i++) { FileItem fileItem = (FileItem) (listFileItems.get(i)); fileItems.put(fileItem.getFieldName(), fileItem); } //Get source file and save it to disk. FileItem sourceFileItem = (FileItem) fileItems.get("File0_0"); String fileName = new File(sourceFileItem.getName()).getName(); File sourceFile = new File(absGalleryPath + File.separator + fileName); sourceFileItem.write(sourceFile); //Get first and only thumbnail and save it to the disk. FileItem thumbnail1FileItem = (FileItem) fileItems.get("File1_0"); File thumbnail1File = new File(absThumbnailsPath + File.separator + fileName + ".jpg"); thumbnail1FileItem.write(thumbnail1File); %>
You can find full source code of this and other samples in the JSP\
subfolder of the Image Uploader Flash installation folder (usually it is C:\Program Files\Aurigma\Image Uploader Flash 7.2.9\
).
Here we use Aurigma Flash Upload Filter to preprocess a request received from Image Uploader Flash. You can find it in the ColdFusion\Binaries\
subfolder of the Image Uploader Flash installation folder (usually it is C:\Program Files\Aurigma\Image Uploader Flash 7.2.9\
). To install the filter under ColdFusion you should perform the following steps:
Aurigma.ImageUploaderFlash.jar
file into the <cf_root>\wwwroot\WEB-INF\lib\
directory (usually it is C:\ColdFusion9\wwwroot\WEB-INF\lib\
on Windows).web.xml
file in the wwwroot\WEB-INF\
folder of the ColdFusion Server (usually it is C:\ColdFusion9\wwwroot\WEB-INF\
on Windows):
<!-- Image Uploader Flash Filter --> <filter> <description>Fix Aurigma Image Uploader Flash request</description> <filter-name>UploadFilter</filter-name> <filter-class>com.aurigma.imageuploaderflash.UploadFilter</filter-class> </filter> <filter-mapping> <filter-name>UploadFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
After the filter is installed you can use the ColdFusion tag <cffile>, which provides all the functionality we need to save uploaded files. Name of the request field, the folder where save file to, and what to do in case of file name collision can be specified via <cffile> attributes.
The following upload script "assumes" that Image Uploader Flash is configured in the way considered above.
<cfprocessingdirective pageEncoding="utf-8"> <!---This variable specifies relative path to the folder, where the gallery with uploaded files is located. Do not forget to put a slash in the end of the folder name.---> <cfset galleryPath="Gallery/" /> <cfset absGalleryPath="#ExpandPath(galleryPath)#" /> <cfset absThumbnailsPath="#absGalleryPath#Thumbnails/" /> <!--- Get source file and save it to disk. ---> <cffile action="UPLOAD" filefield="File0_0" destination="#absGalleryPath#" nameconflict="MakeUnique"> <cfset fileName="#serverFile#"> <!--- Get first and only thumbnail and save it to the disk. ---> <cffile action="UPLOAD" filefield="File1_0" destination="#absThumbnailsPath#" nameconflict="MakeUnique"> <!--- Rename thumbnail file so that it has .jpg extension ---> <cffile action="rename" source="#absThumbnailsPath#/#serverFile#" destination="#absThumbnailsPath#/#fileName#.jpg">
You can find full source code of this and other samples in the ColdFusion\
subfolder of the Image Uploader Flash installation folder (usually it is C:\Program Files\Aurigma\Image Uploader Flash 7.2.9\
).